数控恒流源设计报告加程序Word文档格式.docx
《数控恒流源设计报告加程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《数控恒流源设计报告加程序Word文档格式.docx(38页珍藏版)》请在冰点文库上搜索。
MSP430F149单片机就是一个16位的、具有精简指令集的、超低功耗的混合型单片机。
由于它具有极低的功耗、达到60KB的FLASH容量、丰富的片内外设与相对较小的体积及方便灵活的开发环境,已成为众多单片机系列中一颗耀眼的“芯星”。
开发板资源描述:
【1】、板载MSP430F149芯片
【2】、集成USB型BSL编程器(对自身或其她板子进行bsl编程)
【3】、提供32、768KHZ与8MHZ两种晶振连接方式
【4】、采用USB供电与程序下载,优质电容滤波
【5】、采用标准JTAG接口(14针),支持硬件仿真。
【6】、所有IO口(包括AD电源等)均引出(未焊接排针,可自己向上或向下焊接)。
【7】、4路彩色LED全部上拉,可以借此观察程序运行状态。
【8】、2个优质独立按键。
【9】、板载手动复位电路。
【10】、板载蜂鸣器电路,可做音乐实验等。
【11】、提供NRF24L01+无线模块接口。
【12】、板子集成USB转串口功能。
【13】、向外提供3、3v与5v电源排针。
MSP430的端口有P1、P2、P3、P4、P5、P6、S与COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。
MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。
端口P1`P6的每一位都可以独立用于输入/输出,即具有位寻址功能。
常见的键盘接口可以直接用端口进行模拟,用查询或者中断方式控制。
由于MSP430的端口只有数据口,没有状态口或控制口,在实际应用中,如在查询式输入/输出传送时,可以用端口的某一位或者几位来传送状态信息,通过查询对应位的状态来确定外设就是否处于“准备好”状态。
端口的功能。
(1)P1,P2端口:
I/O,中断功能,其她片内外设功能如定时器、比较器;
(2)P3,P4P5P6端口:
I/O,其她片内外设功能如SPI、UART模式,A/D转换等;
(3)S,COM端口:
I/O,驱动液晶。
MSP430各端口具有丰富的控制寄存器供用户实现相应的操作。
其中P1,P2具有7个寄存器,P3~P6具有4个寄存器。
通过设置寄存器我们可以实现:
(1)每个I/O位独立编程;
(2)任意组合输入,输出与中断;
(3)P1,P2所有8个位全部可以用作外部中断处理;
(4)可以使用所以指令对寄存器操作;
(5)可以按字节输入、输出,也可按位进行操作。
端口P1,P2的功能可以通过它们的7个控制寄存器来实现。
这里,Px代表P1或P2。
(1)PxDIR:
输入/输出方向寄存器。
8位相互独立,可以分别定义8个引脚的输入/输出方向。
8位再PUC后都被复位。
使用输入/输出功能时,应该先定义端口的方向。
作为输入时只能读,作为输出时,可读可写。
0:
输入模式;
1:
输出模式。
如:
P1DIR|=BIT4;
//P1、4输出,P2DIR=0XF0;
//高4位输出,低4位输入。
(2)PXIN:
输入寄存器,为只读寄存器。
用户不能对它进行写入,只能通过读取其寄存器的内容来知道I/O口的输入信号。
所以其引脚的方向要选为输入。
如再键盘键盘扫描程序中经常要读取行线或者列线的端口寄存器值来判断案件情况。
例如:
unsignedcharkey;
P1DIR&
=~BIT4;
//P1、4输入……
key=P1IN&
0X10;
//输出端口P1、4的值……
(3)PXOUT:
输出寄存器。
该寄存器为I/O端口的输出缓冲寄存器,再读取时输出缓存的内容与引脚方向定义无关。
改变方向寄存器的内容,输出缓存的内容不受影响。
PIOUT|=0X01;
//P1、0输出1,PIOUT&
=~0X01;
//P1、0输出0。
(4)PXIFG:
中断标志寄存器。
她的8个标志位标志相应引脚就是否有中断请求有待处理。
无中断请求,1:
有中断请求。
其中断标志分别为PXIFG、0~PXIFG、7。
应该注意的就是:
PXIFG、0~PXIFG、7共用一个中断向量,为多源中断。
当任一事件引起的中断进行处理时,PXIFG、0~PXIFG、7不会自动复位,必须由软件来判断就是对哪一个事件,并将相应的标志复位。
另外,外部中断事件的时间必须保持不低于1、5倍的MCLK时间,以保证中断请求被接受,且使相应中断标志位置位。
(5)PXIES:
中断触发沿选择寄存器。
如果允许PX口的某个引脚中断,还需定义该引脚的中断触发方式。
上升沿触发使相应标志置位,1:
下降沿触发相应标志置位。
MOV、B#07H,&
P1IES;
p1低3位下降沿触发中断。
(6)PXIE:
中断使能寄存器。
PX口的每一个引脚都有一位用以控制该引脚就是否允许中断。
禁止中断,1:
允许中断。
MOV、B#0E0H,&
P2IE;
P2高3位允许中断。
(7)PXSEL:
功能选择寄存器。
P1,P2两端口还具有其她片内外设功能,将这些功能与芯片外的联系通过复用P1,P2引脚的方式来实现。
PXSEL用来选择引脚的I/O端口功能与外围模块功能。
选择引脚为I/O端口,1:
选择引脚为外围模块功能。
P1SEL|=0X10;
//P1、4为外围模块功能。
端口P3、P4、P5、P6没有中断能力,其余功能同PI,P2。
除掉端口P1,P2与中断相关的3个寄存器,端口P3,P4,P5,P6的4个寄存器(用法同P1,P2)分别为PXDIR,PXIN,PXOUT,PXSEL可供用户使用。
端口COM与S,她们实现与液晶片的直接接口。
COM为液晶片的公共端,S为液晶片的段码端。
液晶片输出端也可经软件配置为数字输出端口。
3、2电源模块:
5v12v佰嘉达D-120A双组电源
佰嘉达D-120A双组电源就是开关电源(英文:
Switching
Mode
Power
Supply),又称交换式电源、开关变换器,就是一种高频化电能转换装置。
其功能就是将一个位准的电压,透过不同形式的架构转换为用户端所需求的电压或电流。
开关电源体积小、重量轻:
由于没有工频变压器,所以体积与重量只有线性电源的20~30%。
功耗小、效率高:
功率晶体管工作在开关状态,所以晶体管上的功耗小,转化效率高,一般为60~70%,而线性电电源只有30~40%。
所以选择开关电源转化与提供12V与5V电压。
第4章DA模块
因为MSP430F149单片机内部并没有内置DAC12模块,所以必须外接DAC芯片进行DA转换。
考虑到恒流源的精度与步进的大小,我们决定使用12位的DAC芯片来进行DA转换。
经过挑选,我们使用12位的TLV5618。
其连接图如下
DA模块电路图
特性双通道12位电压输出型DAC
可编程设置时间:
3uS—10uS
兼容TMS320与SPI接口
可直接代替TLC5618
应用数字电路控制
数字偏移及增益控制
工业生产控制
机器与自动控制装
第5章AD模块
这里采用的就是MSP430F149单片机内部的ADC12模块,需在单片机外接如图所示的一些元件辅助芯片。
ADC12提供4种转换模式:
单通道单次转换
序列通道单次转换
单通道多次转换
序列通道多次转换
这里我们只用单通道单次转换
对选定的通道进行单次转换要进行如下设置:
x=CSStartAdd,指向转换开始地址
ADC12MEMx存放转换结果
ADC12IFG、x为对应的中断标志
ADC12MCTLx寄存器中定义了通道与参考电压
转换完成时必须使ENC再次复位并置位(上升沿),以准备下一次转换。
在ENC复位并再次置位之前的输入信号将被忽略。
AD模块电路图
不论用户使用何种转换模式,都要处理以下问题:
设置具体模式
输入模拟信号
关注转换结束信号
存放转换数据以及采用查询或者中断方式读取数据
二、ADC12寄存器说明
1.ADC12CTL0
控制寄存器0,各位定义:
15~12
11~8
7
6
5
4
3
2
1
SHT1
SHT0
MSC
2、5V
REF
ON
ADC12
TOVIE
TVIE
ENC
SC
ADC12SC——采样/转换控制位。
在不同条件下,ADC12SC的含义如下所示:
ENC——转换允许位。
ADC12为初始状态,不能启动A/D转换;
首次转换由SAMPCON上升沿启动
ADC12TVIE——转换时间溢出中断允许位(当前转换还没完成时,又发生一次采样请求,则会发生转换时间溢出)
没发生转换时间溢出
发生转换时间溢出
ADC12OVIE——溢出中断允许位(当ADC12MEMx中原有数据还没有读出,而又有新的转换结果数据要写入时,则发生溢出)
没发生溢出
发生溢出
ADC12ON——ADC12内核控制位
关闭ADC12内核
打开ADC12内核
REFON——参考电压控制位
内部参考电压发生器关闭
内部参考电压发生器打开
2、5V——内部参考电压的电压值选择位
选择1、5V内部参考电压
选择2、5V内部参考电压
MSC——多次采样转换位(CONSEQ<
>
0表示当前转换模式不就是单通道单次转换)
SHT1、SHT0——采样保持定时器1,采样保持定时器0
分别定义保存在转换结果寄存器ADC12MEM8~ADC12MEM15与ADC12MEM0~ADC12MEM7中的转换采样时序与采样时钟ADC12CLK的关系。
采样周期就是ADC12CLK周期乘4的整数倍。
2.ADC12CTL1
转换控制寄存器1(大多数3~15位,只有在ENC=0时才可被修改),各位定义:
11~10
9
8
7~5
4、3
2、1
CSSTARTADD
SHS
SHP
ISSH
DIV
SSEL
CONSEQ
BUSY
CSSTARTADD——转换存储器地址位。
该4位所表示的二进制数0~15分别对应ADC12MEM0~15。
可以定义单次转换地址或序列转换的首地址。
SHS——采样触发输入源选择位。
SHP——采样信号(SAMPCON)选择控制位。
ISSH——采样输入信号方向控制位
ADC12DIV——ADC12时钟源分频因子选择位。
分频因子为该3位二进制数加1
ADC12SSEL——ADC12内核时钟源选择
CONSEQ——转换模式选择位
ADC12BUSY——ADC12忙标志(只用于单通道单次转换模式,在其它转换模式下,该位无效)
3.ADC12MEM0~ADC12MEM15
转换存储寄存器
该组寄存器均为16位寄存器,用来存放A/D转换结果。
中用其中低12位,高4位在读出时为0
4.ADC12MCTLx
转换存储控制寄存器(所有位只有在ENC为低电平时可修改,在POR时各位被复位)
对于每个转换存储器有一个对应的转换存储器控制寄存器,所以在进行CSSTARTADD转换存储器地址位设置的同时,也确定了ADC12MCTLx。
5.ADC12IFG
中断标志寄存器
为16位,其中中断标志位ADC12IFG、x对应于转换存储寄存器ADC12MEMx:
ADC12IFG、x置位:
转换结束,并且转换结果已经装入转换存储寄存器。
ADC12IFG、x复位:
ADC12MEMx被访问。
6.ADC12IE
中断使能寄存器
为16位,对应于ADC12IFG寄存器:
ADC12IE、x=1:
允许相应的中断标志位ADC12IFG、x在置位时发生的中断请求服务。
ADC12IE、x=0:
禁止相应的中断标志位ADC12IFG、x在置位时发生的中断请求服务。
7.ADC12IV
中断向量寄存器
ADC12就是一个多源中断:
有18个中断标志(ADC12IFG、0~ADC12IFG、15与ADC12TOV,ADC12OV),但只有一个中断向量。
所以需要设置这18个标志的优先级顺序,按照优先级顺序安排中断标志的响应,高优先级的请求可以中断正在服务的低优先级。
各中断标志会产生一个0~36的偶数。
ADC12OV与ADC12TOV会在访问ADC12IV后自动复位。
但在响应了ADC12IFG、x标志对应的中断服务之后,相应的标志不自动复位,用以保证能处理发生溢出的情况。
第6章键盘模块与显示器模块
6、1键盘模块
4X4键盘电路图
键盘在单片机系统中用得非常广泛。
当按键多而且单片机的I/O口有限时,往往要考虑的就是矩阵式键盘。
其中有两种方式可以实现矩阵式键盘:
一种就是利用纯硬件完成解码的称为“编码键盘”;
另外一种就是利用软件实现解码的称为“非编码键盘”。
在单片机系统中,只要单片机有空余的时间来解码时,我们往往利用的就是软件解码的形式,即“非编码键盘”来实现矩阵键盘。
这样可以节约成本。
软件原理为扫描键盘矩阵时,每次只有一行电平拉低。
在逐次扫描拉低的这些行的同时,去读那些列的电平。
;
被拉低的行上,按下的键对应的列的电平为0,其它为1、用左移位的指令,在进位位CY里就可以检测出就是0还就是1、为1表示无按下,;
为0表示该键按下。
在扫描按键时,如无按下,则取码指针R1加1后,继续扫描。
如有键按下,转按键处理子程序,按键按下标志位;
F0清0(表示按下)。
此时,取码指针的值,就就是按键的键名。
随后继续进入按键检测子程序重新扫描。
每个按键有它的行值与列值,行值与列值的组合就就是识别这个按键的编码。
矩阵的行线与列线分别通过两并行接口与CPU通信。
每个按键的状态同样需变成数字量“0”与“1”,开关的一端(列线)通过电阻接VCC,而接地就是通过程序输出数字“0”实现的。
键盘处理程序的任务就是:
确定有无键按下,判断哪一个键按下,键的功能就是什么;
还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值与回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
键盘连接成4×
4的矩阵形式,占用单片机P1口的8根线,行信号就是P5、0-5、3,列信号就是P5、4-5、7。
复位
小数点
清除一位
输出
暂停
确认
按键对应功能图
6、21602液晶显示模块
工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)
注:
为了表示的方便,后文皆以1表示高电平,0表示低电平。
1602液晶也叫1602字符型液晶,它就是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距与行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD就是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符与数字)。
目前市面上字符液晶绝大多数就是基于HD44780液晶芯片的,控制原理就是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
⑵管脚功能
1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VCC接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端,高电平
(1)时读取信息,负跳变时执行指令。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
⑶特性
3、3V或5V工作电压,对比度可调
内含复位电路
提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能
有80字节显示数据存储器DDRAM
内建有192个5X7点阵的字型的字符发生器CGROM
8个可由用户自定义的5X7的字符发生器CGRAM
指令集
1602通过D0~D7的8位数据端传输数据与指令。
显示模式设置:
(初始化)
00110000[0x38]设置16×
2显示,5×
7点阵,8位数据接口;
显示开关及光标设置:
00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)
000001NSN=1(读或写一个字符后地址指针加1&
光标加1),
N=0(读或写一个字符后地址指针减1&
光标减1),
S=1且N=1(当写一个字符后,整屏显示左移)
s=0当写一个字符后,整屏显示不移动
数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)
其她设置:
01H(显示清屏,数据指针=0,所有显示=0);
02H(显示回车,数据指针=0)。
第7章软件设计
开始
初始化
键按下按下?
没有有按键按下
读取键值
key_Flag标志位置1
判断就是否按过确认键?
AD转换使能
有按键按下
有确认键按下
输出键按下?
有输出键按下
DA转换
判断电流就是否为键入值
步进加减1
就是
否
各键值功能执行
Flag就是否为1
Flag清0
第8章实验总结
经测试,此数控恒流源在0~100mA时可适用负载的电阻范围为0~69、Ω。
在50mA时相对误差为0,在10mA时显示电流比电流表小1、5mA,在100mA时显示电流比电流表大1、5mA。
并且其误差值近视抛物线。
经分析,我们认为就是一方面因为DA采样信号经过LM358放大10倍时误有一定的误差,并不就是绝对的十倍,故造成其输出值不就是理想状态。
另一方面就是因为单片机的ADC模块的参考电压不就是很准确,也造成一定影响。
附录1:
实物图
附录2:
程序清单
#include<
msp430x14x、h>
#include"
Keypad、h"
cry1602、h"
#defineucharunsignedchar
#defineuintunsignedint
#defineNum_of_Results32
ucharshuzi[]={"
0123456789、"
};
staticuintresults[Num_of_Results];
//保存ADC转换结果的数组
voidTrans_val(uintHex_Val);
voidDA_conver(uintdig);
voidshuzishuru(uintshuzi);
voidWrite_A_B(uintdata_a,uintdata_b,ucharchannal,ucharmodel);
//提示语句:
ucharStrings[]={"
Pleaseenterthecurrentvalue:
"
ucharceshi1[]={"
Nodata"
ucharceshi2[]={"
Lessthan100mA"
ucharceshi3[]={"
A:
ucharceshi4[]={"
B:
ucharceshi5[]={"
mA"
//引用外部变量的声明
externunsignedcharkey_val;
externunsignedcharkey_Flag;
unsignedlongDianliu2,Dianliu3;
uintDianliu1,zheng,daxiao,com,VV;