The control part uses PICl6F7X series microcontrollers, which are programmed in assembly language. The running speed is fast and can meet the system requirements. Most of the control used here is digital signal control, and the motor control has only two states: open and closed. The coordinated actions of the two arms, body, head, feet, etc. are required during the action. The entire control system is relatively complex, so some issues need to be paid attention to in PIC program writing and space allocation.
1. Use of action flags
In the whole control, there are many combined actions. When all the action positioning is controlled by photoelectric switches, there are some problems in programming. For example, if the left hand is required to rise to the applause position and the right hand is required to rise to the hand-raising position (the initial position of the hand is at the lowest lower position), the photoelectric switch 0 is effective (that is, it is blocked when it is 0), and reaches the correct position. With simple understanding, it can be written as the following program:
listP=16c73
calllefthandup
callrighthandup
LOcallreadinsignal
bdsscsl_v,1efthandlIGBTs
calllefthandstop
btfsccsl_v,righthandlight4
gotoL0
callrighthandstop
L1callreadinsignal
btfsccsl_v,lefthandlight3
gotoL1
calllefthandstop
Lefthandlight represents the photoelectric switch, which is used to determine whether it has reached the corresponding position. 1 represents the lowest position of the arm; 2 represents the handshake position of the arm; 3 represents the applause position of the arm; 4 represents the high hand-raising position of the arm. The above program describes the process of the left arm rising to the hand-raising position and the right arm rising to the applause position and stopping. First determine whether the left hand has reached it, if it has, the left hand stops, then check whether the right hand has reached the hand-raising position, if it has, stop, otherwise loop the above detection until the left hand reaches the applause position and the right hand reaches the hand-raising position.
Note that 3 and 4 here represent the applause position and the hand-raising position. After the loop detection, the arm can stop at each position, but the mechanical action has inertia, and the mechanical stop position may be a little above or below the position, which affects the following actions. The mechanical action may malfunction after several actions, that is, the program cannot run normally. In this case, it is necessary to modify the program writing method and use the flag bit to control the action. If the control flag bit is used, the flag position must be set to zero in the action sub-function. The program is as follows:
listp=16c73
:
actlonstopflagequOx6e; bit definition
lefthandfla8cqu0x0; 0 means stop the left hand action
rightbandflagequOxl; O means stop the right hand movement
:
MOV lwOx03
MOV Wfactionstopflag
calllefthanduo
callrighthandup
L2callreadinsignal
btfsscsl_v,lefthandhght3
calllefthatldotop
btfsscsl_v,righthandlight4
callrighthandstop
MOV lwOx00
subwfactionstopflag,w
btfssstatus,z
gotoL2
Continue with the following procedure
Activstopflag represents the action flag parameter, which assigns a value to the action flag. The action stop function will clear the flag value. The above program has the same function as the previous program, realizing the action of the two arms. The above program describes whether the left hand reaches the applause position and stops, and whether the right hand reaches the hand-raising position and stops. Check whether the action flag is zero. If not, keep looping and checking; if yes, execute the following program.
2. Different uses of GOTO and CALL instructions
In the PIC assembly program, CALL and GOT0 instructions are used in different occasions. Generally speaking, the CALL instruction is mostly used between the subprogram and the main program; and the GOTO instruction is mostly used between the state transition modules, that is, entering another state from this state without returning. Since the stack of the PIC microcontroller is limited, the GOTO statement cannot be used endlessly in the program, which will cause the stack to overflow and the program cannot run normally. The internal loops of each small program occupy a small number of stack levels, so it is feasible to use the GOTO instruction, but in a large program, using GOTO cannot return to the next instruction of the program before the call. After the CALL instruction completes the call to the subroutine, it returns to the program before the call. The program is as follows:
listD=16c76
start:ca11setcpu
callautomatlsn, statel
L3callreadinsignal
btfsccs2_v,ultrasonicdetectl
gotoL3
gotoautonatlsmstate2
:
automatlsmstate2:
return
auatomaTIsmstate1 and automatismstate2 represent two states, and uhrasonicdetect1 represents an input ultrasonic detection signal. The above program describes calling the automatismmstate1 state, and after execution, the following detection ultrasonicdetect is performed. If there is no trigger, the detection will be looped. If triggered, it will enter the automatismstate2 state, and it will not return to the following program after execution.
3. Different usage of status flags Z and C
When judging the flag, Z (zero flag) and C (borrow flag) are different. When Z is 1, it means the result above is 0, and when Z is 0, the result is not 0. When C is 1, there is a borrow, and when C is 0, there is no borrow. When using a timer, the C flag is generally used. This is because when a certain action is completed to check the timer, the time may not have arrived, or it may be just right, or it may have exceeded the time. As long as the time has arrived or exceeded, the timer must be turned off as required, as described in the following program. If the Z flag is used, it may not be detected when it is equal to 0, and the stop state cannot be determined, while using z can control the timing well. Z is mostly used for general calculations, such as the previous action flag.
listD=16c76
callopentimerO
L4 MOV lwd '30'
subwft0_v2,W
btfssstatus,c
gotoL4
cauclosetimer0
The program checks whether the time reaches 1.5s. If not, it waits in a loop. If it reaches 1.5s or the detection time has passed, it turns off the timer and executes the following program.
In short, using the right method in programming PIC microcontrollers can make the entire program run stably, and the use of program space will also be reduced, avoiding bugs in debugging. This is my experience in practice. There are still many deficiencies or issues that have not been considered. I hope to continue to learn the essence of PIC microcontrollers through discussions with everyone.
Previous article:Evaluation board design based on PIC microcontroller
Next article:What are the advantages of PIC microcontrollers compared to other microcontrollers?
- Popular Resources
- Popular amplifiers
Professor at Beihang University, dedicated to promoting microcontrollers and embedded systems for over 20 years.
- Innolux's intelligent steer-by-wire solution makes cars smarter and safer
- 8051 MCU - Parity Check
- How to efficiently balance the sensitivity of tactile sensing interfaces
- What should I do if the servo motor shakes? What causes the servo motor to shake quickly?
- 【Brushless Motor】Analysis of three-phase BLDC motor and sharing of two popular development boards
- Midea Industrial Technology's subsidiaries Clou Electronics and Hekang New Energy jointly appeared at the Munich Battery Energy Storage Exhibition and Solar Energy Exhibition
- Guoxin Sichen | Application of ferroelectric memory PB85RS2MC in power battery management, with a capacity of 2M
- Analysis of common faults of frequency converter
- In a head-on competition with Qualcomm, what kind of cockpit products has Intel come up with?
- Dalian Rongke's all-vanadium liquid flow battery energy storage equipment industrialization project has entered the sprint stage before production
- Allegro MicroSystems Introduces Advanced Magnetic and Inductive Position Sensing Solutions at Electronica 2024
- Car key in the left hand, liveness detection radar in the right hand, UWB is imperative for cars!
- After a decade of rapid development, domestic CIS has entered the market
- Aegis Dagger Battery + Thor EM-i Super Hybrid, Geely New Energy has thrown out two "king bombs"
- A brief discussion on functional safety - fault, error, and failure
- In the smart car 2.0 cycle, these core industry chains are facing major opportunities!
- The United States and Japan are developing new batteries. CATL faces challenges? How should China's new energy battery industry respond?
- Murata launches high-precision 6-axis inertial sensor for automobiles
- Ford patents pre-charge alarm to help save costs and respond to emergencies
- New real-time microcontroller system from Texas Instruments enables smarter processing in automotive and industrial applications
- Ubuntu 18.04 version compiles Android and reports an error
- EEWORLD University Hall ---- Introduction to UAV Design - Nanjing University of Aeronautics and Astronautics
- EEWORLD University Hall--Detailed explanation of algorithms Stanford University classic video course
- [Master's Year-end Lecture] Control the last mile: How to prevent performance problems before a major network outage occurs
- A silicon microphone was soldered with flying wires
- EEWORLD University Hall----Embedded System Theory and Technology Wuhan University of Science and Technology
- Share a plug-in mpfshell that can run MicroPyhton code on VSCODE.
- EEWORLD University - Learn about industrial ARM using Sitara AM6x training series
- Interpolation filter design
- [ATmega4809 Curiosity Nano Review] Development Environment Setup