200 likes | 532 Views
MSP340 LaunchPad 介绍. LaunchPad 是一款适用于 TI 的 MSP430G2xx 系列产品的完整开发解决方案,可支持多达 20 个引脚,提供板上 Flash 仿真工具,以直接连接至 PC 轻松进行编程、调试和评估。. 目录. 一、 基本时钟系统 二、 通用IO 三、中断 四、 定时器 五、 ADC10 六、课程软件任务介绍. LAUNCHPAD时钟系统 包括: VLO 、 LFXT 、 DCO. 一、时钟系统. • 超低功耗 / 低频振荡器 (VLO) – 4 – 20kHz (典型值12kHz)
E N D
MSP340 LaunchPad介绍 LaunchPad 是一款适用于TI的MSP430G2xx 系列产品的完整开发解决方案,可支持多达20 个引脚,提供板上Flash 仿真工具,以直接连接至PC 轻松进行编程、调试和评估。
目录 一、基本时钟系统 二、通用IO 三、中断 四、定时器 五、ADC10 六、课程软件任务介绍
LAUNCHPAD时钟系统包括:VLO、LFXT、DCO 一、时钟系统 • 超低功耗/低频振荡器 (VLO) –4–20kHz(典型值12kHz) –500nA待机流耗 –0.5%/°Cand4%/V漂移 •外接晶体振荡器(LFXT1) –片内可编程负载电容 –故障保护OSC_Fault –脉冲滤波器 •数字控制振荡器(DCO) –0-to-16MHz –+3%容差 –出厂校准(FlashI.M.) 辅助时钟 32768Hz 主系统时钟 子系统时钟 上电后: MCLK 和 SMCLK 由DCOCLK 提供(约1.1 MHz) ACLK 由 LFXT1CLK 提供(LF 模式,6pF内部负载电容)
设置时钟涉及到寄存器BCSCTL1、BCSCTL2的设置,具体见用户说明说,下面举例设置DOC为1MHz及系统主时钟MCLK。设置时钟涉及到寄存器BCSCTL1、BCSCTL2的设置,具体见用户说明说,下面举例设置DOC为1MHz及系统主时钟MCLK。 // 设置DCO为1MHz BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; // 设定 MCLK BCSCTL2 |= SELM_1+ DIVM_3; // 设置 MCLK 对MCLK的时钟源进行选择 SELM_0:MCLK选择DCOCLK SELM_1:MCLK选择DCOCLK SELM_2:MCLK选择XT2CLK/LFXTCLK SELM_3:MCLK选择LFXTCLK 对MCLK,即指令运行的时钟源进行分频 DIVM_0:MCLK=1M DIVM_1:MCLK=1M/2 DIVM_2:MCLK=1M/4 DIVM_3:MCLK=1M/8
二、通用IO 1、P口端口寄存器: (1)、PxDIR 输入/输出方向寄存器 (0:输入模式 1:输出模式) (2)、PxIN 输入寄存器 输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。 (3)、PxOUT 输出寄存器 寄存器内的内容不会受引脚方向改变的影响。 (4)、PxIFG 中断标志寄存器 (0:没有中断请求 1:有中断请求) 该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求; 这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位; 外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受; (5)、PxIES 中断触发沿选择寄存器 (0:上升沿中断 1:下降沿中断) (6)、PxSEL 功能选择寄存器 (0:选择引脚为I/O端口 1:选择引脚为外围模块功能) (7)、PxREN 上拉/下拉电阻使能寄存器 (0:禁止 1:使能)
3、基本操作: (1)、所有P口都可作为通用IO口使用 (2)、所有P口都可进行字节操作和位操作 按字节操作: 例: P1DIR=0xff; //将P1口作为输出口 PIOUT=0x20; // P1口输出0x20 P1DIR=0x00; //将P1口作为输入口 data=P1IN //读取P1口外部输入值 按位操作: 例: P1DIR=BIT0; //将P1.0作为输出口 P1OUT|=BIT0; //P1.0输出1 P1OUT&=~BIT0; //P1.0输出0 P1DIR&=~BIT0 //将P1.0口作为输入 data=P1IN&BIT0 //读取P1.0口外部输入值
三、中断 1、中断源: 外部中断:P1、P2、定时器中断、看门狗定时器中断、串口中断、A/D转换 中断、比较器中断。 2、中断的 一般设置: (1)、打开、关闭局部中断: 打开局部中断一般是给想关的特殊功能寄存器相关位置1 以P1口外部中断为例: 打开局部中断: P1IE|=BIT0;//打开P1.0外部中断 ,BIT0的值为0x01,即把P1IE的第一位置1
关闭局部中断一般是给想关的特殊功能寄存器相关位置0关闭局部中断一般是给想关的特殊功能寄存器相关位置0 同样以P1口外部中断为例: 关闭局部中断: P1IE&=~BIT0;//关闭P1.0外部中断 (2)、打开、关闭全局中断: _EINT();//打开总中断,相当于51的EA=1; _DINT();//关闭总中断,相当于51的EA=0; (3)、各中断向量Interrupt Vectors: • PORT1_VECTOR • PORT2_VECTOR • ADC10_VECTOR • TIMER0_VECTOR • TIMER0_A0_VECTOR • TIMER0_A1_VECTOR • TIMER1_A0_VECTOR • TIMER1_A1_VECTOR • WDT_VECTOR
(4)、中断应用程序举例(外部中断): void interrupt_initial() { P1DIR&=~BIT7; //P1.7为输入 P1IE|=0x80; //P1.7中断允许 P1IES|=0x00; //P1.7上升沿触发 P1IFG=0; //P1.7中断标志清除,对于多源中断必须先清中断标志再打开中断 _EINT(); //总中断允许 } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1IFG&=~BIT7; //P1.7中断标志清除 /*在此写中断服务子程序*/ } • #pragmavector-下面的函数是一个用于所列矢量的中断 • __interruptvoid-识别中断名称
四、定时器 • 异步16位定时器/计数器 • 连续、递增-递减、递增计数模式 • 3个捕获/比较寄存器 • PWM输出 • 中断向量寄存器,实现快速中断响应 • 可触发DMA • 多个时钟源可选 • 所有430均有Timer_A
本次课程设计中,采用增计数模式产生PWM波 增计数模式: 捕获/比较寄存器CCR0用作Timer_A增计数模式的周 期寄存器,因为CCR0为16位寄存器,所以该模式 适用于定时周期小于65536的连续计数情况。计数器 TAR可以增计数到CCR0的值,当计数值与CCR0的 值相等时,定时器复位,并从0开始重新计数。
增计数模式: 增计数模式 0FFFFh 例程: void zengjishu() { TACTL=TASSEL1+TACLR; //选择计数时钟为ACLK,将计数器TAR清零 CCTL0=CCIE; //使能中断 CCR0=200; //计数终值,方波频率为:32768/200/2 TACTL|=MC_1; //选择Timer_A为增计数模式 P1DIR|=BIT0; //P1.0作为输出 _EINT(); //使能总中断 } #pragma vertor =TIMERA0_VECTOR __interrupt void Timer_A(void) { P1OUT^=0X01; //P1.0取反 } 0h
例程 #include"in430.h" #include "msp430g2553.h" static unsigned char temp = 0xaa; void main( void ) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P1DIR = 0xff; //设定P1口为输出方式 P1OUT = 0xff; //给P1口赋初始值 TA0CCTL0 = CCIE; //打开中断 (Timer0_A3 Capture/Compare Control 0 ) TA0CCR0 = 50000; //设定计数变量 TA0CTL = TASSEL_2 + MC_2; //定时器选择时钟SMCLK,使用模式二连续计数方式 _EINT(); //开总中断 while(1) { LPM0; } //开启低功耗模式0,进入低功耗模式,等待中断唤醒 } #pragma vector = TIMER0_A0_VECTOR __interrupt void time1(void) { temp = ~temp; //取反 P1OUT = temp; //P1口赋值 }
五、ADC10 一、主要特点: 1、 10位转换精度。 2、有多种时钟源可供选择,内带时钟发生器。 3、配有6个外部通道和2个内部通道。 4、内置参考电源,并且参考电压Vref有8种组合。 5、采样速度快,最快200Ks/s。 6、四种工作模式: 1、单通道单次转换模式: CONSEQ_0。 2、单通道多次转换模式: CONSEQ_2。 3、序列通道单次转换模式:CONSEQ_1 。 4、序列通道多次转换模式:CONSEQ_3。
例程: P1SEL&=0x20; //使能A/D通道A5; ADC10CTL0 = ADC10SHT_1+ ADC10ON+SREF_1+REF2_5V+REFON+MSC; // 打开ADC10内核,确定采样周期为8*ADC10OSC/2,选择内部参考电压为2.5v; ADC10CTL1 = INCH_5+ADC10DIV_1+CONSEQ_2; // input A5模拟信号输入选择通道A5即P1.5,设置为单通道多次转换模式,分频因子为2 ADC10AE0 |= BIT5; // 使P1.5允许AD模拟输入信号 ADC10CTL0|=ENC; //使能转换; ADC10CTL0|=ADC10SC; //开始转换;
单片机系统 本课程设计是把输入电压通过buck电路降压给锂电池充电,锂电池电压输出端通过boost电路升压输入到逆变桥得到交流电。有三处用到单片机的地方:buck电路降压、boost电路升压和逆变桥触发输入信号。前两者通过闭环调节取得给定电压,逆变桥触发输入信号则是由单片机输出SPWM波。 充电部分 软件设计
定时器中断模块 设置定时器中断TIMER_A (1) 它的工作方式和周期,此处设为使用 32位的周期定时器 TIMER1_A0,周期为 1ms。 (2) 使能定时器中断。 (3) 使能定时器 在定时器中断中,对单片机原始频率8MHz 进行8 分频,再乘以1000 成为TIMER1-A0 的周期1ms,每触发一次中断就计数加1,当计数500 下,即500ms 后,对转换好的采 样值进行一次处理,进行PI 调节控制输出PWM 波的占空比。
SPWM 输出SPWM则通过SPWM数组表实现,数组表有足够多的数值,按照正弦规律变化,实现正弦波的近似输出。当数字表的元素越多,精度越高。