基于AVR的微功耗电刺激器
脉冲频率的精确控制。另外单片机还有6个PWM输出口,可以用于调节仪器的刺激强度。ATmega48单片机内部有独立的硬件看门狗时钟,可以有效地防止单片机死机。
本系统选用的ATmega48V是ATmega48的低电压工作的芯片,选用ATmega48V作为电刺激器的主控芯片,几乎不需要另加其他的元件。ATmega48V可以在1.8V~5.5V范围的电压下工作,在电池使用的有效电压范围内,单片机均可正常工作,能充分利用电池的容量。
3.2 脉冲发生电路
通常具有一定驱动功率的脉冲输出电路首先产生脉冲波形,再将脉冲波形用集成的功率放大器作驱动放大,放大电路工作在线性放大区。这种放大电路必须具有静态电流来维持合适的静态工作点,功耗较大。为了降低耗电流,本系统的电刺激器用开关方式生成刺激脉冲。单片机及其脉冲发生器电路原理如图3所示。J1是刺激电极的接线端子,OC0A是ATmega48V定时器0的PWM输出口,根据实验的要求调节输出强度。用PWM输出以及R6、R7、C6和C7组成的滤波器调节U3A正相的输入电压。运放U3A接为正相放大方式,放大倍数由R8和R9决定。Q2为功率放大三极管,增大输出的驱动能力。Q3工作在开关状态,用于控制输出脉冲的宽度和频率,当ATmega48V的9脚是高电平时,Q3导通,输出刺激脉冲;导通500μs后,ATmega48V的9脚变到低电平,Q3关闭,脉冲结束;按10Hz的频率循环往复。
4 功能实现及软件编程
ATmega48有131条指令,大多是单机器周期指令,指令系统非常丰富。ATmega48在指令设计时很好地考虑到C语言的操作模式,用C语言编程可以得到很高的代码效率。ATmega48属于AVR系列的单片机,常用的用于AVR单片机开发的C语言有两种:AVR-ICC和AVR-GCC。AVR-ICC是商业的AVR的C语言集成化开发工具(IDE),界面友好,使用简单,有生产和代理商很好的技术支持。而AVR-GCC是依靠网络流行的公开源代码的自由软件,可以从网上(http://www.avrfreaks.net)免费下载编译软件和各种工具软件。由于AVR-GCC有大量的高手参与开发和众多网上参与者的测试,其软件的更新速度和代码效率以及软件缺陷率的排除都非常出色。但是AVR-GCC是由UNIX平台上移植过来的,保留了类似UNIX的操作方式,对于不熟悉UNIX的WINDOWS用户,其使用时入门很困难,只有熟练使用后才能感到其功能的强大。在http://www.avrfreaks.net网上有关于AVR-GCC的论坛,使用中的许多问题都可以在论坛上得到帮助。由于AVR-GCC具有低廉的使用成本和出色的功能,所以本系统选用AVR-GCC作为编程工具。
电刺激器在工作的间歇期进入休眠状态。ATmega48有6种休眠方式,每一种方式休眠的部件不相同,休眠后单片机的功耗也不同。由于电刺激器在休眠时要求定时重新唤醒进行工作,必须保留一个定时器的工作。因此选用的休眠方式为IDLE,在IDLE方式下定时器2仍然可以工作。以下是休眠部分的程序。
set_sleep_mode(SLEEP_MODE_IDLE); //设置休眠方式为IDLE
SMCR |= _BV(SE); //允许休眠
_asm_ _volatile_ ('sleep' 'nt' :: ); //进入休眠
SMCR amp;= ~_BV(SE); //从休眠中唤醒,进入工作状态,不允许休眠
定时器2用于对休眠期的时间间隔计时。t2_init_idle(void) 是进入休眠状态前初始定时器2的程序,SIGNAL(SIG_OVERFLOW2)是休眠状态下定时器2的中断服务程序。每1分钟定时器2将会产生溢出中断,唤醒单片机。
void t2_init_idle(void){ //定时器2进入休眠状态前的初始化
CLKPR=(1<<CLKPCE); //允许改变系统时钟;进入休眠状态前改变系统时钟
CLKPR=0x05; //系统时钟的分频比例为32,系统时钟为4kHz
TCCR2A=0; //定时器/计数器2工作于定时器方式
TIMSK2=(1<<TOIE2); //允许定时器2溢出中断
TCCR2B=0x07; //定时器2时钟分频比例为1024
TCNT2=32; //定时器2产生1分钟定时的初始值
}
SIGNAL(SIG_OVERFLOW2){ //定时器2溢出的中断服务程序
TCNT2=32; //重置定时器2产生1分钟定时的初始值
min++; //分钟计数
}
当唤醒5次,即休眠5分钟后,单片机重新进入唤醒工作状态。在唤醒工作状态下,使用定时器2控制脉冲的宽度和频率,需要定时器2重新初始化,并将系统时钟恢复到128kHz(程序略)。
设置定时器0工作于PWM输出方式,用于控制刺激强度。
void t0_init(void){ //定时器0初始化为PWM输出
TCCR0B=(1<<CS01); //定时器0时钟分频比例为8
TCCR0A=(1<<WGM00)|(1<<WGM01); //快速PWM方式
TCCR0A|=(1<<COM0B1); //符合时为低电平,峰值变高
OCR0B=outv; //输出电平用OCR0B控制
}
系统总程序流程如图4所示。
电刺激实验器的开发是为了植入大鼠体内,研究电刺激对癫痫抑制的机理。
- Flash损耗均衡的嵌入式文件系统设计(06-01)
- 锁相环控制及初始化简析(08-27)
- 基于AVR单片机的ISP1362OTG设计(09-06)
- 基于AVR单片机的串口转FSK的通信模块设计(01-23)
- 案例分析:基于AVR32的隧道环境监测系统(03-18)
- 科技帮我们远离灾难:灾难检测飞行器(03-18)