一,预习报告修改
1. 防止按一次键,多次循环的程序修改:
K1CHECK:
JB P1.1,K1HANDLE;
修改为K1CHECK
…
K2CHECK:
JB P1.2,K2HANDLE;
修改为K2CHECK
修改理由为:K1CHECK和K2CHECK的功能都是在按键没有跳起来之前是阻止程序继续往下走,这是因为人手按住键的时间相对于程序执行时间时间是很长的,假设按住再放开的时间为0.1s,即100ms;要使PWMH增减一的程序需要最长时间约20多个机器周期,一个机器周期90ns,那么这个循环执行时间为us级,如果不判断按键是否弹起,按一次可执行十万次PWMH增一或减一的操作,而PWMH上限为21。显然,按键将会失效。所以,增加一个判断按键是否弹起过程,然后再继续工作是十分必要的。
2.防抖动,即按一次键,弹若干次情况的排除的程序修改方案(加一个延时程序):
…
K1H2:
INC PWMH;增加占空比
DELAY,增加延时程序
…
K2H2:
DEC PWMH
修改为DELAY
…
DELAY:
MOV R7,#50
D1: MOV R6,#100
D2: DJNZ R6,D2
DJNZ R7,D1
SJMP SCAN;延时程序,延时10ms
修改原因:实验过程中发现,在做了改动1之后,确实避免了按一次键就全满的错误。但是,理论上要按20次才能把高电平按满,但是事实上不到20次,原因就在于按一次键之后,按键会抖动若干次,总时间持续约10ms,因此,在做完一个循环后,避免计算抖动的次数,
就必须在下一个循环开始之前,加一个相应时间的延时,保证抖动结束之后再开始判断是否又有键按下。
二,实验结果分析:
在做了以上的修改之后,按下加速和减速开关,在P1.0端口用示波器观测,可以明显地看到波形占空比增加和减少,同时,直流电机的速度也能出现相应的增加和减少。结果符合实验要求。
三,其他问题分析:
尽管做了两个修改,但是还是会出现以下不可避免的问题:1.观测直流电机的转速比较困难,往往在转盘高速时,增减占空比人眼视觉很难观测到差异,而在占空比较小时,变化过于剧烈,导致在高电平占空比未到零时,转盘就已经停了下来。原因是转盘的摩擦较大,对电平的变化感应不够灵敏,对于起始转动高电平占空比要求较高。2.当把占空比调到最高时,示波器显示的波形并不是一条高电平的直线,原因是:在一个周期结束时,改程序做的操作是,先置零,后置一,故导致在一个周期的开端会有一个很窄的负脉冲出现。
一,预习报告修改
1. 防止按一次键,多次循环的程序修改:
K1CHECK:
JB P1.1,K1HANDLE;
修改为K1CHECK
…
K2CHECK:
JB P1.2,K2HANDLE;
修改为K2CHECK
修改理由为:K1CHECK和K2CHECK的功能都是在按键没有跳起来之前是阻止程序继续往下走,这是因为人手按住键的时间相对于程序执行时间时间是很长的,假设按住再放开的时间为0.1s,即100ms;要使PWMH增减一的程序需要最长时间约20多个机器周期,一个机器周期90ns,那么这个循环执行时间为us级,如果不判断按键是否弹起,按一次可执行十万次PWMH增一或减一的操作,而PWMH上限为21。显然,按键将会失效。所以,增加一个判断按键是否弹起过程,然后再继续工作是十分必要的。
2.防抖动,即按一次键,弹若干次情况的排除的程序修改方案(加一个延时程序):
…
K1H2:
INC PWMH;增加占空比
DELAY,增加延时程序
…
K2H2:
DEC PWMH
修改为DELAY
…
DELAY:
MOV R7,#50
D1: MOV R6,#100
D2: DJNZ R6,D2
DJNZ R7,D1
SJMP SCAN;延时程序,延时10ms
修改原因:实验过程中发现,在做了改动1之后,确实避免了按一次键就全满的错误。但是,理论上要按20次才能把高电平按满,但是事实上不到20次,原因就在于按一次键之后,按键会抖动若干次,总时间持续约10ms,因此,在做完一个循环后,避免计算抖动的次数,
就必须在下一个循环开始之前,加一个相应时间的延时,保证抖动结束之后再开始判断是否又有键按下。
二,实验结果分析:
在做了以上的修改之后,按下加速和减速开关,在P1.0端口用示波器观测,可以明显地看到波形占空比增加和减少,同时,直流电机的速度也能出现相应的增加和减少。结果符合实验要求。
三,其他问题分析:
尽管做了两个修改,但是还是会出现以下不可避免的问题:1.观测直流电机的转速比较困难,往往在转盘高速时,增减占空比人眼视觉很难观测到差异,而在占空比较小时,变化过于剧烈,导致在高电平占空比未到零时,转盘就已经停了下来。原因是转盘的摩擦较大,对电平的变化感应不够灵敏,对于起始转动高电平占空比要求较高。2.当把占空比调到最高时,示波器显示的波形并不是一条高电平的直线,原因是:在一个周期结束时,改程序做的操作是,先置零,后置一,故导致在一个周期的开端会有一个很窄的负脉冲出现。