一个平平凡凡的搬砖者,各位请不吝赐教
1.选用的主控芯片为ES32F365x,此芯片性能强大还相对比较便宜。
2.原理图主要部分
a.升压部分
此部分主要靠DCPWM1的口接入PWM控制mos管去刺激电感产生升压,再通过检测PWM1-OUT口检测电压,实现DCPWM1和PWM1-OUT的一个反馈,从而36V处是一个可控可调的一个电压值。
b.脉冲电疗仪的一个输出电路
PWM-1A、PWM-1B、PWM-1C、PWM-1D是PWM的口,在程序中并没有去捣鼓PWM的关联性,采用了定时器模拟的操作,实现H桥的一个脉冲操作,切记不能同向导通,PWM-1F作为一个使能开关的作用,而PWM-1IN是作为一个检测的机制,主要是反馈是否接触到皮肤(即有无负载)。
H桥的控制产生的电疗效果可参考低频理疗按摩仪8种常用基本波形 - 百度文库
3.部分控制程序
a.主循环预览
b.升压部分
void ald_timer_period_elapsed_callback_GP16C4T0(struct timer_handle_s *arg)
{
if(sys.sys_flag.modeSwitch)
{
ADCData=h_adc.perh->NCHDR;
//OUT_Vol=(u16)((double)ADCData*3.3*104.7/4096/4.7);
sys.voltage.OUT_Vol=(u16)(ADCData*345510/192512);
if(sys.voltage.OUT_Vol>sys.voltage.SET_Vol)
{
if(PWM_i>0)
{
PWM_i--;
}
}
if(sys.voltage.OUT_Vol<sys.voltage.SET_Vol)
{
PWM_i++;
}
}
else
{
PWM_i=0;
}
AD16C4T0->CCVAL1=PWM_i;
}
这是定时器里面的一个检测电压和控制PWM输出的一个功能,通过快速的获取输出电压然后去调控AD16C4T0的PWM输出,此为硬件PWM和ADC的寄存器操作,主要是为了速度快,不同芯片操作不一样。
c.某个电疗波形的简单输出
void Mode1(void)
{
if(sys.sys_flag.modeSwitch)
{
if(sys.SysTASK.modeCn++>23998)
{
sys.SysTASK.modeCn=0;
CH1_F_High;
}
if(sys.SysTASK.modeCn<4)
{
CH1_F_High;
CH1_D_Low;
CH1_C_High;
CH1_B_Low;
CH1_A_High;
sys.sys_flag.feedback1=0;
}
else if(sys.SysTASK.modeCn==4)
{
CH1_F_Low;
CH1_D_High;
CH1_C_Low;
CH1_B_High;
CH1_A_Low;
}
else if(sys.SysTASK.modeCn<13)
{
CH1_F_High;
CH1_D_High;
CH1_C_Low;
CH1_B_High;
CH1_A_Low;
sys.sys_flag.feedback1=0;
}
else
{
CH1_F_Low;
CH1_D_High;
CH1_C_Low;
CH1_B_High;
CH1_A_Low;
sys.sys_flag.feedback1=1;
}
}
else
{
CH1_F_Low;
CH1_D_Low;
CH1_C_Low;
CH1_B_Low;
CH1_A_Low;
sys.sys_flag.feedback1=0;
}
}
CH1xx的为IO口输出,然后通过定时器计数来调控输出脉冲时间的控制。
实际产品可升压至四十多伏都可保持稳定的低频脉冲输出。