MSP430单片机应用实例
- 格式:doc
- 大小:812.50 KB
- 文档页数:35
MSP430 定时器TB中断应用实例msp430定时器中断,实现功能:利用定时器TB0的中断实现板上led灯得闪烁。
TA和TB的设置相似,需要设置的寄存器有:1、TBR:定时计数器主体,对定时计数器进行初始值设置。
2、TBCTL:控制寄存器,对定时器的各个属性进行设置,各位如图所示,(图中是TA的控制寄存器,把A改成B就是了)TBSSELx是选择定时器时钟输入源,一般设置为2取系统时钟。
IDx是对输入时钟进行分频,0不分频,1为2分频,2为4分频,3为8分频MCx为计数模式控制位,0为停止模式,1为增基数模式,2为连续计数模式,3为增/减计数模式3、TBCCR0寄存器用于设置比较值,例如增加计数模式时,当TBR中的值增加到TBCCR0中的值时,产生中断。
程序代码:#include "msp430.h"#define led P1OUTint main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;P1DIR = 0x01;TBR = 0;//设置计数器初值TBCTL |= TBSSEL_2|0xc0|MC_1;//对寄存器TBCTL进行设置,TBSSEL_2为选择MCLK系统时钟,0xc0为8分频,MC_1为增计数模式TBCCR0 = 0xfffd;//设置比较值,当TBR中的值增加到TBCCR0时,产生中断。
TBCCTL0 &= ~CAP;//设置为比较模式while(1){led = 0x01;do{;}while(!(TBCCTL0 & CCIFG));//没有中断标志时进行空操作TBCCTL0 &= 0xfffe;//对中断标志进行软件清零led = 0x00;do{;}while(!(TBCCTL0 & CCIFG));TBCCTL0 &= 0xfffe;}//return 0;}。
MSP430单片机的应用实例首先来了解什么是单片机,什么是msp30单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成(如图1所示)。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器,如图2所示)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗的混合信号处理器(Mixed Signal Processor)。
• 59•伴随着快节奏时代的到来,人们对高品质生活的追求在无形之中加大了自身的压力,便引发了人们较为普遍的恐慌感和焦灼情绪。
情绪焦虑已经在人们日常生活中不可缺少,想缓解心理压力却没有一个合适的方法.相比于去医院找心理医生进行心理压力舒缓,我们团队基于心灵安抚来研发的可佩戴式的智能手环,在很大程度上解决了大部分人们没有时间看心理医生进行心理辅导的压力。
该智能手环在生活中可便携佩戴,及时通过脉搏传感器、语音收集器,对身边产生压力的信息进行收集,反馈到MSP430芯片由核心算法来快速计算,准确的通过智能手环的一系列调节来对使用者经行心理压力的舒缓。
1 基于心灵安抚的基础设备产品介绍(1)心灵安抚基础设备顾名思义是一种只能提供心灵缓解的设备,我们设计初衷只是让心情不好的人并不想起到治疗的作用,可能在对于患者的治疗中可以起到辅助治疗的作用。
关于设备的使用材料目前采用仿真皮肤硅胶人体硅胶制作手环的表带。
(2)关于设备使用,设备可以直接通过情绪变化时心率的变化或直接从麦克风采集语音的方式与使用者进行互动,设备直接从数据库中选择与其相适合的音乐。
也可以通过采集当事人发生的事件,自我拾取信息,并在要求的情况下,适当播放相关故事,让当事人可以从故事中找到心理慰藉,更好的调节情绪。
手环提供心率传感器,检测心率。
手环与手机适配,同样支持蓝牙5.0。
设备设置USB 插口,以便于对设备进行充电。
在后期还支持设备的固件升级与软件算法的更新,使设备能满足更多人的需求。
2 结构介绍2.1 核心信息处理器MSP430与外围功能模块电路相连接,MSP430一款16位的低功耗单片机,海口经济学院 郭庆峰 张 河 方廷源 王凯博 邢博理 杨亚洲单片机MSP430设计的心灵安抚智能手环采用RISC 结构,具有丰富的寻址方式、27条强大内核指令,拥有较高的运算和处理速度,具有超低的功耗。
MSP430单片机拥有丰富的外围功能,通过这些模块的组合,可满足不同的功能需求,极大的提高了芯片的使用效率。
一、基础_实验【10个】1、入门试验:LED闪烁(1个)2、时钟实验:设置MCLK、ACLK、SMCLK(1个)3、低功耗实验:设置低功耗模式(1个)4、IO端口试验:IO端口寄存器设置(1个)5、定时器:看门狗定时器、TimerA寄存器设置(2个)6、比较器:比较器A寄存器(1个)7、Flash:flash读写(1个)8、异步通信:异步通信寄存器设置(1个)9、ADC:ADC12寄存器设置(1个)二、开发板模块简单程序【56个】1、LED流水灯实验(红、黄、绿)(1)LED1:检测开发板(2)LED2:普通IO控制闪烁(3)LED3:PWM信号控制闪烁2、蜂鸣器实验(1)蜂鸣器1:单频音(步进变音调)(2)蜂鸣器2:奏乐(祝你平安)3、数码管实验(1)数码管1(显示123456)(2)数码管2(动态显示0~F)(3)数码管3(流动光圈)(4)数码管4(来回光标)4、4×1独立按键实验(1)4×1键盘1:扫描数码管显示(2)4×1键盘2:中断数码管显示(3)4×1键盘3:控制LED(4)4×1键盘4:控制蜂鸣器5、4×4矩阵键盘实验(1)4×4键盘1:行列扫描数码管显示(2)4×4键盘2:行列扫描1602液晶显示(3)4×4键盘3:控制LED蜂鸣器6、1602液晶实验(1)1602液晶1:动态字符显示(2)1602液晶2:静态字符显示(3)1602液晶3:内部时钟显示7、3.3V-5V电平转换实验(1)电平转换1:输出5V方波(2)电平转换2:输出不同占空比的方波(3)电平转换3:MCLK,SMCLK,ACLK8、RS232接口实验(1)RS232接口1:MCU发送数据PC机显示(2)RS232接口2:按键控制MCU发送数据PC机显示(3)RS232接口3:PC机发送数据MCU液晶显示(4)RS232接口4:MCU回发接收到的PC机数据(5)RS232接口5:RS232控制蜂鸣器9、RS485接口实验(1)RS485接口1:发送程序(2)RS485接口2:接收程序10、USB接口实验(1)USB接口1:简单连接测试(2)USB接口2:USB接收数据(3)USB接口3:USB发送数据11、PS2接口实验(1)PS2接口1:PS2控制1602显示(2)PS2接口2:PS2控制数码管显示(3)PS2接口3:PS2控制LED和蜂鸣器12、12-Bit高精度温度传感器实验(1)温度传感器1:DS18B20在数码管显示(2)温度传感器2:DS18B20在液晶显示13、RTC实时时钟实验(1)实时时钟1:DS1302测试(2)实时时钟2:DS1302电子钟14、2k Bit EEPROM实验(1)EEPROM1:AT24C02测试(2)EEPROM2:读出数据通过串口在PC机显示15、12-Bit模数转换器(ADC)接口实验(1)模数转换器1:ADC在数码管显示(2)模数转换器2:ADC在1602液晶在显示(3)模数转换器3:ADC通过串口在PC机显示16、8-Bit数模转换器(DAC)实验(1)数模转换器1:DAC控制LED(2)数模转换器2:DAC输出电压,ADC采样转换并在液晶上显示17、12864液晶实验(与12864液晶配套)(1)12864液晶并口1:字符显示(2)12864液晶并口2:汉字显示(3)12864液晶并口3:图形显示(4)12864液晶并口4:综合演示(5)12864液晶串口5:字符显示(6)12864液晶串口6:汉字显示(7)12864液晶串口7:图形显示(8)12864液晶串口8:综合演示18、射频模块CC1000实验(1)射频模块1:发送数据(2)射频模块2:接收数据19、ucos移植注:17、18程序随模块赠送三、开发板综合程序【30】1、键盘综合实验(1)4×4键盘+蜂鸣器+LED+数码管显示(2)4×4键盘+蜂鸣器+LED+1602液晶显示(3)4×4键盘+蜂鸣器+LED+PC机显示(4)PS2键盘+UART+PC机显示(5)PS2键盘+USB+PC机显示2、接口综合实验(1)USB UART(2)UART USB(3)RS232 RS485(4)RS485 RS2323、温度时间综合实验(1)DS18B20 + DS1302 + 数码管(2)DS18B20 + DS1302 + USB(3)DS18B20 + DS1302 + UART(4)DS18B20 + DS1302 + 16024、AD DA综合实验(1)ADC + 1602(2)ADC + UART(3)ADC + USB(4)DAC + LED + KEY(5)DAC + UART(6)DAC + USB(7)ADC + UART + DS1302(8)ADC + DAC + 1602 + KEY(9)ADC + DAC + UART + KEY5、其他综合实验(1)AT24C02高级应用(搜索,擦除,读出全部)(2)DS1302高级应用(内部RAM存取数据)6、12864液晶综合实验(1)汉字库(2)图形库7、3.2寸TFT触摸屏实验(1)静态图片(2)动画/***************************************************程序功能:BoardConfig.h 头文件---------------------------------------------------***************************************************/ typedef unsigned char uchar;typedef unsigned int uint;//控制位的宏定义#define Ctrl_Out P3DIR |= BIT3 + BIT6 + BIT7;#define Ctrl_0 P3OUT &= ~(BIT3 + BIT6 + BIT7) #define SRCLK_1 P3OUT |= BIT7#define SRCLK_0 P3OUT &= ~BIT7#define SER_1 P3OUT |= BIT6#define SER_0 P3OUT &= ~BIT6#define RCLK_1 P3OUT |= BIT3#define RCLK_0 P3OUT &= ~BIT3//板上资源配置函数void BoardConfig(uchar cmd){uchar i;Ctrl_Out;Ctrl_0;for(i = 0; i < 8; i++){SRCLK_0;if(cmd & 0x80) SER_1;else SER_0;SRCLK_1;cmd <<= 1;}RCLK_1;_NOP();RCLK_0;}/***************************************************程序功能:控制8个LED闪烁,用于测试下载功能是否正常---------------------------------------------------测试说明:观察LED闪烁***************************************************/#include <msp430x14x.h>//#include "BoardConfig.h"/****************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗// BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯CCTL0 = CCIE; //使能CCR0中断CCR0 = 2047; //设定周期0.5STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式P6DIR = 0xff; //设置P6口方向为输出P6OUT = 0xff;_EINT(); //使能全局中断LPM3; //CPU进入LPM3模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){P6OUT ^= 0xff; //P2口输出取反}/***********************************************程序功能:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"------------------------------------------------测试说明:观察流水灯流动顺序和速度的变化************************************************//***********************************************程序功能:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"------------------------------------------------测试说明:观察流水灯流动顺序和速度的变化************************************************/#include <msp430x14x.h>#include "BoardConfig.h"uint i = 0,j = 0,dir = 0;uint flag = 0,speed = 0; //flag--灯光流动方式,speed--灯光流动速度/****************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗// BoardConfig(0xf0);CCTL0 = CCIE; //使能CCR0中断CCR0 = 50000;TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,8分频增计数模式P6DIR = 0xff; //设置P2口方向为输出P6OUT = 0xff;_EINT(); //使能全局中断LPM0; //CPU进入LPM0模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数,在这里通过标志控制流水灯的流动方向和流动速度参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){if(flag == 0){P6OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1}else if(flag == 1){P6OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8}else{if(dir) //灯的点亮顺序D8 -> D1,D1 -> D8,循环绕圈{P6OUT = ~(0x80>>(i++));}else{P6OUT = ~(0x01<<(i++));}}if(i == 8){i = 0;dir = ~dir;}j++;if(j == 40){i = 0;j = 0;flag++;if(flag == 4) flag = 0;switch(speed){case 0:TACTL &=~ (ID0 + ID1);TACTL |= ID_3;break;case 1:TACTL &=~ (ID0 + ID1);TACTL |= ID_2;break;case 2:TACTL &=~ (ID0 + ID1);TACTL |= ID_1;break;case 3:TACTL &=~ (ID0 + ID1);TACTL |= ID_0;break;default:break;}if(flag != 3) speed++;if(speed == 4) speed = 0;}}/*******************************************************程序功能:用从P2.3和P2.4输出的PWM波形驱动LED闪烁P2.3口输出方波的占空比为75%P2.4口输出方波的占空比为25%-------------------------------------------------------测试说明:观察LED的亮灭的时间长短用来连2.3到6.1口看*******************************************************/#include <msp430x14x.h>//#include "BoardConfig.h"void main(void){WDTCTL = WDTPW + WDTHOLD; // 关狗//BoardConfig(0xb0); // 关闭数码管和电平转换,打开流水灯P2DIR = 0xff; // P2端口设置为输出P2OUT = 0xff; // 关闭其他LEDP2SEL |= BIT3 + BIT4; // P2.3和P2.4连接内部模块CCR0 = 4096-1; // PWM周期为1SCCTL1 = OUTMOD_7; // CCR1 reset/setCCR1 = 3072; // CCR1 PWM duty cycleCCTL2 = OUTMOD_7; // CCR2 reset/setCCR2 = 1024; // CCR2 PWM duty cycleTACTL = TASSEL_1 + ID_3 + MC_1; // ACLK/8, up mode_BIS_SR(LPM3_bits); // Enter LPM3}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, Output Buffered SMCLK, ACLK and MCLK//// Description: Output buffered MCLK, SMCLK and ACLK.// ACLK = LFXT1 = 32768, MCLK = DCO Max, SMCLK = XT2// //* XTAL's REQUIRED - NOT INSTALLED ON FET *//// //* Min Vcc required varies with MCLK frequency - refer to datasheet *//内部已经连好了的//// MSP430F149// -----------------// /|\| XIN|-// | | | 32k// --|RST XOUT|-// | |// | XT2IN|-// | | XTAL (455k - 8Mhz)// |RST XT2OUT|-// | |// | P5.4|-->MCLK = DCO Max// | P5.5|-->SMCLK = XT2// | P5.6|-->ACLK = 32kHz//// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench Version: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer DCOCTL = DCO0 + DCO1 + DCO2; // Max DCOBCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSELBCSCTL2 |= SELS; // SMCLK = XT2P5DIR |= 0x70; // P5.6,5,4 outputsP5SEL |= 0x70; // P5.6,5,5 optionswhile(1){}}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, LPM3 Using WDT ISR, 32kHz ACLK//// Description: This program operates MSP430 normally in LPM3, pulsing P3.4// at 4 second intervals. WDT ISR used to wake-up system. All I/O configured// as low outputs to eliminate floating inputs. Current consumption does// increase when LED is powered on P3.4. Demo for measuring LPM3 current.// ACLK= LFXT1/4= 32768/4, MCLK= SMCLK= default DCO// //* External watch crystal on XIN XOUT is required for ACLK *////暗久才亮一下和亮暗和时钟没关系啊// MSP430F149// ---------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.5|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench Version: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);//BCSCTL1 |= DIVA_2; // ACLK/4WDTCTL = WDT_ADL Y_1000; // WDT 1s/4 interval timerIE1 |= WDTIE; // Enable WDT interruptP1DIR = 0xFF; // All P1.x outputsP1OUT = 0; // All P1.x resetP2DIR = 0xFF; // All P2.x outputsP2OUT = 0; // All P2.x resetP3DIR = 0xFF; // All P3.x outputsP3OUT = 0x30; // All P3.x resetP4DIR = 0xFF; // All P4.x outputsP4OUT = 0; // All P4.x resetP5DIR = 0xFF; // All P5.x outputsP5OUT = 0; // All P5.x resetP6DIR = 0xFF; // All P6.x outputsP6OUT = 0x80; // All P6.x resetwhile(1){uint i;_BIS_SR(LPM3_bits + GIE); // Enter LPM3P3OUT &= ~BIT5; // Set P3.5 LED on亮for (i = 18000; i>0; i--); // DelayP3OUT |= BIT5; // Clear P3.5 LED off暗}}#pragma vector=WDT_VECTOR__interrupt void watchdog_timer (void){_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)}//******************************************************************************* // MSP-FET430P140 Demo - Software Toggle P3.4//// Description: Toggle P3.4 by xor'ing P3.4 inside of a software loop.// ACLK= n/a, MCLK= SMCLK= default DCO ~800k//// MSP430F149// -----------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench Version: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP3DIR |= BIT4; // Set P3.4 to output directionfor (;;){volatile unsigned int i;P3OUT ^= BIT4; // Toggle P3.4 using exclusive-ORi = 50000; // Delaydo (i--);while (i != 0);}}//****************************************************************************** // MSP-FET430P140 Demo - WDT, Toggle P3.4, Interval Overflow ISR, DCO SMCLK//P3.4使用软件WDT中断时间。
MSP430单片机在调控LED植物智能补光系统中的应用中国是一个发展中的农业大国,农业问题始终是关系到中国经济社会发展的根本问题。
在我国, 农业的现状在极大程度上依然按传统方式, 高成本, 低效率, 投入较高, 产值较低, 这些特征使得农业成为国民经济中亟待发展的一环。
科学研究表明,光照度和光质对植物的光合作用、生长发育、物质代谢及结构形态等具有重要影响,其中380~760 nm 可见光波段是决定光合作用最重要的光照波段,但有效吸收波段主要为其中红、蓝两波段。
对农作物使用红、蓝光进行补光,使其处于最佳生长环境中,可以很大程度提高农作物产量,缓解我国的农业问题,为人们提供更加新鲜、高质量与高效的农产品。
同时,本项目采用了新光源LED灯(发光二极管,lighting emitting diode,简称LED)。
与目前传统光源(白炽灯、日光灯、高压钠灯)相比,拥有光源纯、波长类型多、节能环保、使用寿命长、发热少和易于控制等优点,更有利于节约能源。
同时我们设计的植物智能补光系统可以根据不同植物在不同生长阶段的需光量不同,进行精准化定量补光,从而能以最少的能耗使植物处于最佳生长状态。
本项目以LED植物智能补光系统为研究对象,通过科学的研究与分析,最终做成一个基于单片机的LED植物智能补光系统的模拟机。
在此系统工作前预先设定好该时期植物生长所需的温度、红蓝光照度阀值,温度传感器对温室内温度进行检测,当温度高于促进光合作用的温度阀值时,再分别对红、蓝光照度进行检测,实际光照度在阀值以内时,系统可以自动对补光状态,根据所设阈值与实际值之差计算实际需光量,进而再根据与实际需光量对应的两路PWM 控制信号的占空比,分别产生对应的PWM 信号,达到控制LED 灯组的亮度对植物实施精确补光的目的。
从而保证植物一直处于最佳生长状态。
2 系统硬软件设计2.1系统整体结构整个系统由五个模块组成,分别是控制模块、检测模块、电源模块、补光模块和用户交换模块组成。
MSP430单片机的应用实例阚世俊B12050229首先来了解什么是单片机,什么是msp30 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成(如图1所示)。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器,如图2所示)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
第九章 应用实例在本章中,将前几章所学的内容进一步扩展,设计并完成几个完整的应用实例,巩固所学的知识。
特别是提高程序设计和调试能力。
9.1 直流电动机的应用直流电动机的基本知识 1)直流电动机工作原理直流电动机就是将直流电能转换为机械能的转动装置。
直流电动机具有良好的调速性能、较大的启动转矩和过载能力强等诸多优点,因此在许多行业中应用广泛。
特别在全国大学生电子设计竞赛中,微型直流电机、电动小车多次作为控制类题目主要控制对象。
微型直流电机(包括玩具直流电机、小型直流减速电机等)一般为永磁式直流电动机。
永磁式直流电动机由定子磁极、转子、换向器、电刷、机壳、轴承等构成。
定子磁极采用永磁体(永久磁钢),定子的作用是产生主磁场。
转子为进行能量转换的电枢,在磁场中产生感应电动势和电磁转矩。
直流电机定子固定有环状永磁体,电流通过转子上的线圈产生安培力,当转子上的线圈与磁场平行时,再继续旋转受到的磁场方向将改变,因此此时转子末端的电刷跟换向片交替接触,从而线圈上的电流方向也改变,产生的洛伦兹力方向不变,所以电机能保持一个方向转动。
要改变直流电机旋转方向,只需要改变转子线圈电压极性。
直流电机转速公式:Φ-=e ad C IR U n 式中,U d 为电机外加直流电压,R a 为电枢绕组电阻,Ce Φ为电机常数,I 为电机电流,电机电流与负载大小有关。
从直流电机转速公式可见,只要改变电枢电压就能实现直流电机的无极调速。
2)直流电机驱动电路小功率直流电机驱动电路可以采用如图9_1所示的H 桥开关电路。
这种驱动电路可以很方便地实现直流电机的四象限运行,即正转、正转制动、反转和反转制动。
UA 和UB 是互补的TTL 驱动信号。
由于大功率PNP 晶体管价格高,难实现,所以这个电路只在小功率电机驱动中使用。
当四个功率开关全用NPN 晶体管时,需要解决两个上桥臂晶体管(BG1和BG3)的基极电平偏移问题。
图(b)中H 桥开关电路利用两个晶体管实现了上桥臂晶体管的电平偏移。
但电阻R 上的损耗较大,所以也只能在小功率电机驱动中使用。
(a) PNP/NPN管 (b)4个NPN管图9_1 H桥开关电路对于H桥驱动电路,上下桥臂功率晶体管施加互补信号。
由于带载情况下,晶体管的关断时间通常比开通时间长,例如当下桥臂晶体管未及时关断,而上桥臂抢先开通时就出现所谓“桥臂直通”故障。
桥臂直通时,电流迅速变大,造成功率开关损坏。
所以设置导通延时,是必不可少的。
在实际制作中,可以采用大功率达林顿管或场效应管等分离元件进行驱动电路设计。
为了简化电路设计,建议使用H桥电机驱动L298N等专用芯片,其性能稳定可靠、电路简单。
对于大功率驱动系统,希望将主回路与控制回路之间实行电气隔离,此时常采用光电耦合电路来实现。
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。
内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
L298N内部结构示意图如图9_2所示。
该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。
图9_2 L298N内部结构示意图使用一个L298N驱动器可以驱动两台直流电机。
引脚ENA、ENB可用于输入PWM脉宽调制信号对电机进行调速控制。
如果无须调速可将两引脚接5V,使电机工作在最高速状态,实现电机正反转就更容易了。
如果输入信号端IN1接高电平,输入端IN2接低电平,电机M1正转;如果信号端IN1接低电平, IN2接高电平,电机M1反转。
控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。
反之则反转。
对于电机的调速,我们采用PWM调速的方法。
其原理就是开关管在一个周期内的导通时间是t,PWM周期为T,则电机两端的平均电压为Ud=Vs*t/T=a*Vs。
其中,占空比a=t/T,Vs为驱动电源电压。
电机的转速与电机两端的电压成正比,而电机两端的电压与控制波形的占空比成正比,因此电机的速度与占空比成正比。
占空比越大,电机转得越快。
实例9.1直流电机的单片机控制任务要求:设计一个能控制直流电机正反转的调速电路,采用PWM方式调速,有加减速按键、启动停止按键和方向选择键。
分析说明:在选择控制直流电机的PWM周期时,要考虑的因素主要是电枢电感,驱动器能承受的频率,散热条件,对噪声的要求等等。
在驱动器能承受的范围内,周期短一点好(也就是PWM频率高一点)。
这样转矩更平稳,噪声小,电流纹波小。
但是驱动器发热会严重一些。
直流电机用PWM实现调速的PWM波周期通常在毫秒以下量级,电机功率越大,可以允许周期也大一些。
不考虑开关频率的限制的话周期越短越好,但实际上电流越大电压越高开关的频率上限越低,或者说周期的下限越高。
PWM周期较大时,电机高转速时由于惯性大不会有瞬间停顿问题,但让电机运转在很低的转速时确实会出现类似蠕动的瞬间停顿的问题。
我们选取PWM周期为2.5ms。
1)硬件电路设计为了保证电路简单可靠高,直流电机驱动电路采用电机专用驱动芯片L298N。
四个二极管起到保护驱动芯片L298N的作用,当加到电机上的直流电压关断时,电机电枢线圈将产生很高的感应电压,此感应电压可以通过二极管提供的回路泄放,从而保护驱动芯片。
硬件电路图参见图9_3所示。
2)程序设计#include <msp430f249.h>#define key1 0x01#define key2 0x02#define key3 0x03#define key4 0x04void key_process_1(void);void key_process_2(void);void key_process_3(void);void key_process_4(void);void key_check (void);unsigned char key_value; //定义全局变量,键值unsigned int a=10000; //初值50%占空比void main(void){WDTCTL = WDTPW + WDTHOLD; //停止看门狗BCSCTL2=SELS;P1DIR = 0xff; // P1输出CCR0 = 20000; // PWM 周期2.5msCCTL1 = OUTMOD_7; // CCR1复位/置位CCR1 = a; // CCR1 PWM 占空比5%TACTL = TASSEL_2 + MC_1; // 定时器A时钟源为SMCLK,增计数模式P2IE = 0x27; // P2.0-P2.3 IO口中断使能P2IES = 0x27; // P2.0-P2.3 IO口下降沿触发中断方式P2IFG = 0x0; // P2.0-P2.2 IO口中断标志位清除_EINT(); //中断允许while(1){if(P2IN&BIT4){P1OUT &=~(BIT4+BIT7); //正转P1OUT |=BIT0+BIT5;}else{P1OUT &=~(BIT0+BIT5); //反转P1OUT |=BIT4+BIT7;}CCR1 = a;key_check ();switch (key_value) //对键值进行处理.采switch语法结构查询 {case key1: key_process_1(); //调用键处理程序1break;case key2: key_process_2(); //调用键处理程序2break;case key3: key_process_3(); //调用键处理程序3break;case key4: key_process_4(); //调用键处理程序4break;default: break;}key_value=0x00; //键值清除P2IE = 0x27; // P2.0-P2.2 IO口中断使能P2IFG = 0x0; // P2.0-P2.2 IO口中断标志位清除 }}#pragma vector=PORT2_VECTOR__interrupt void Port_2(void) //P2中断服务程序{switch (P2IFG){case 0x01: key_value=0x01;break;case 0x02: key_value=0x02;break;case 0x04: key_value=0x03;break;case 0x20: key_value=0x04;break;default: P2IFG = 0x0; // P2.0-P2.2 IO口中断标志位清除 break;}P2IFG = 0x0; // P2.0-P2.2 IO口中断标志位清除}void key_check (void){ unsigned int i;for(i=0;i<200;i++); //延时去抖动if(0xff !=(P2IN & 0xD8)) //是否有键存在?{while(0xff !=( P2IN | 0xD8)); //一直等待按键松开}elsekey_value = 0x00; //延时去抖动无键按下,则清除键变量. }void key_process_1(void) //启动{P1SEL |=0X04; // P1.2第二功能TA1输出PWMTACTL = TASSEL_2 + MC_1; // 定时器A时钟源为SMCLK,增计数模式}void key_process_2(void) //停止{P1SEL =0X0;TACTL=MC_0;P1OUT &=~BIT2;}void key_process_3(void) //加速{a+=1000;if(a>=20000) a=20000;}void key_process_4(void) //减速{a-=1000;if(a<=0) a=0;}3)仿真结果与分析多等待一会儿,等电机加速结束,运行稳定后,再进行加速或减速控制。
可以通过示波器观察PWM信号周期和占空比。
9.2 舵机的单片机控制舵机的工作原理舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
目前在高档遥控玩具、航模和遥控机器人中已经使用得比较普遍。
舵机是伺服马达俗称。