微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于微控制器MSC1210的CSR电源控制系统设计

基于微控制器MSC1210的CSR电源控制系统设计

时间:05-05 来源:21IC 点击:

摘要:MSC1210是美国TI 公司生产的24位Δ-ΣA/D转换的51兼容单片机。文章介绍了MSC1210的结构特点和工作原理,并给出了在CSR电源控制系统中的硬件电路和软件程序。

关键词:MSC1210; 模数转换器; 电源;控制系统

引言

MSC1210美国德州仪器公司(TI)生产的高集成混合信号处理器件。它集成了一个增强型8051内核,8路24位高精度Δ-ΣA/D转换,21个中断源,16位PWM,全双工UART(并兼容有SPI功能),32K字节FLASH,片内SRAM可达1.2K字节。MSC1210具有高的模拟和数字集成度,体积小,测量精度高,应用灵活等特点,因而该芯片可广泛应用于工业控制过程、智能发射机、智能传感器等领域。

1 微控制器MSC1210的工作原理

微控制器MSC1210是TI推出的一种集模拟、数字、闪速存储器于一体的高性能微控制系统。其应用范围十分广泛。使用增强的数字处理内核和高速闪存并带有高性能模拟和外围部件,可以实现优越的系统性能。MSC1210包含闪存、片内SFR、SRAM、闪存、暂存和Boot ROM。其存储器在物理结构上有四个存储空间:片内、片外程序存储器,片内、片外数据存储器。由不同的寻址指令对0000H~FFFFH共64KB的空间进行寻址。由于采用不同的寻址方式,程序段和数据段可以重叠。程序存储器由MCU自动读取,也可使用指令MOVC指定所要读取的程序区,这通常用来查找表格。数据存储区使用指令MOVX进行读取,这条指令提供了多种寻址方式以指定目的地址,对64KB数据存储器进行读取。当片内存储器使能时,片内范围的操作将对片内存储器进行读取,片外范围的操作将通过P0和P2口读取外部存储器。用户可以灵活配置程序和数据存储空间的大小。分区大小通过硬件配置位来确定,可以通过串行或并行的方式来编程确定。在用户应用模式下,程序和数据Flash存储空间都可读可写。

2硬件系统设计

国家"九五"重大科学工程HIRFL-CSR(兰州重离子加速器冷却储存环)电源控制系统的主要功能是通过电源与计算机的通信模块完成与中央控制中心的信息交换,接收远程控制中心的各种监测与遥控命令,并将电源的各种状态信息反馈给控制中心。控制系统通信模块的设计是组建开关电源控制系统的关键,所设计的通信模块与计算机通信,实现了计算机与电源的主从总线1∶N(本系统N=26)通信方式,并且采用了RS232C和RS485双串行通信总线标准接口。计算机通过该通信模块可以实时对电源进行开关电源控制回路,开关电源主回路,开关电源,电源故障复位,电源极性转换,读电源当前状态,单读电源当前电流值,多读电源当前电流值,写电源电流值等指令操作。实时获取电源好,负载故障,电源冷却水故障,输出过流,快熔状态,IGBT状态,交流缺相,输入过压,输入过流和电源温度的状态检验信息。

3软件设计

软件设计的开发平台是Keil公司的Keil C7.0. 为了实现对微控制器MSC1210Y5进行命令操作,应用 C1210语言编写的CSR电源控制系统的主要程序代码如下。
void serial_init (void) file://串行口初始化
{
PCON |=0x80;
SCON = 0x52;
TMOD |= 0x20;
file://TH1 = 0xfe;
TH1 = 0xff;
TR1 = 1;
IE=0x80;
ES0 = 1;
CON_TXD=0;
}
void read_cmd(char i_cmd_buf) file://读命令操作
{
··· ···
}
··· ···

void init_I_O(void) file://初始化I/O口
{
P0DDRL= 0x55; file://P0 是输出模式
P0DDRH= 0x55;
P2DDRL= 0xff; file://P2 是输入模式
P2DDRH= 0xff;
P3DDRH= 0x55;
P0=0xff;
P3 |=0xc0;
}
void init_dac_adc(void) file://初始化 DAC 和ADC
{
int decimation=1728;
/* Timer Setup */
CKCON = 0;
USEC= 10;
/* ADC-Vref, SPI and Systimers */
PDCON = 0x1b;
PDCON &= 0x14;
SPICON = 0x06;
SPITCON = 0x28;
ACLK = 9;
/* Set up Aux interrupt */
AIE=0x40;
EAI=1 ;
/* Setup ADC */
PDCON &=0x0f7;
ADMUX=0x78;
ADCON0=0x00;
ADCON2=decimation &0xff;
ADCON3=(decimation >>8)&0x07;
ADCON1=0x41;
AI=CLEAR;
SSCON=0x00;
SSCON=0xDB;
}
void dacout (unsigned int val) file://DAC输出
{
Sync = SET;
Sync = CLEAR;
SPIDATA = 0;
SPIDATA = (char)(val>>8 & 0x00ff);
SPIDATA = (char)(val & 0x00ff);;
}

serial () interrupt 4 using 2 { file://寄存器组2用于中断
unsigned char c,i;

if (RI) { // 如果接收器产生中断
c = SBUF; file://读数据
RI = 0; file://清除中断请求标志位
if(!(cmd_err==0&&cmd_finish==1&&addr_ok==1)){
switch (c) { file://处理数据
··· ···}

ADCcmd_proc() interrupt 6 using 3 file://ADC命令处理
{
unsigned long sum;
sum = ((unsigned long int)SUMR3 << 24)
+ ((unsigned long int)SUMR2 << 16)
+ ((unsigned long int)SUMR1 << 8)
+ (unsigned long int)SUMR0;
adcsum[adcin_p]=(float)(sum*LSB);
adcin_p++;
adcin_p=adcin_p&7;
AI=CLEAR;
SSCON=0x00;
SSCON=0xDB; file://acc shift enable, accum 16x, right shift 4
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top