笔记整理—中断与PWM

        对于ARM而言,中断分作FIQ和IRQ两种,FIQ为快速中断,IRQ为中断。中断有专用的寄存器,在异常向量表中FIQ为最后一个异常,可以将代码直接写在原地,不用跳转。

        这里插播一条前面说过的知识点函数指针:

void (*isr)(void)=NULL;//定义函数指针
.......
(*isr)();//使用指针函数

        中断工作分为两个步骤,其一为做好预案,其二为产生中断执行中断服务程序。

        做好预案:1.初始化中断控制器。2.绑定写好的中断服务程序到中断控制器。3.相应中断的所有条件使能。

        产生中断时执行中断服务程序:1.经过异常向量表跳转到IRQ/FIQ的入口。2.做现场保护,进入中断irq_handler。3.在irq_handler中搞清楚是哪个VIC中断,再对相应的VIC ADDR取isr执行。4.中断服务程序结束,中断现场恢复,后续程序该干嘛干嘛。

        在中断使用过程中,很经典的使用方法是中中断产生PWM信号。简单的单片机使用GPIO与中断(ISR)产生与公用定时器产生PWM信号。循环产生以周期为T,占空比为duty的PWM信号。而高级的SOC芯片会有专用的一套定时器,不会使用ISR去产生PWM信号,通用固定的GPIO与定时器相互绑定,硬件自己会产生相应duty的PWM,不会用ISR产生中断,而是通过TCONTB(周期寄存器)与TCMPB(duty寄存器)两个寄存器产生相应周期和占空比的PWM信号。

波形= TCNTB*时钟周期<——高时钟+低时钟的时间和(意为多少时间减一次TCNTB的值)
占空比=TCMPB/TCNTB

        其原理如下所示:

        寄存器与PWM波形对照关系如下(画的有点丑):

         当TCNT值>TCMPB中的值时,会产生高电或低点,而TCNT值<TCMPB中的值时,会产生翻转电平。电平翻转器可以将duty占空比进行翻转。

        设置寄存器想要的值可以通过先清零再改写的步骤进行:

1.先清零 rGPIOCON&=~(0Xf<<8)
2.再改写 rGPIOCON|=(2<<8)

         周期和时间成倒数关系1MHZ=1μm,而希望设置周期为500KHZ,则对应2μs。也就是设定一个每隔2μs计数一次(对于TCONT中的数减1)。如果要定时x,则TCNTB中写入x/2μs。例如,定时为0.5ms(2khz)则应写入250(0.5ms/2μs),此时设置占空比为50%,则设TCMPB为125。

        在使用寄存器的自动填装功能(AUTO-Reload)之前,要手动进行一次填装(Manual Updata)。

        TCNTB数字越大,则对应的PWM波形但周期越长,TCNTB数字越小,则对应的PWM波形但周期越短。TCNPB为计时时间,T↑则f↓。

        死区生成器,交流电大电器的双路不可以同时导通,以PWM驱动IGBT(一种晶体管)的两路整流,当正电与负电同时为高时必短路。

        理论中,电流是同时变化的,但实际上不然,不太可能同时上/下沿变化所以应该设置空量(死区),当死区的时间短了容易短路,多了会降低精确度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值