/*init_PWM(): ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π¨ΠΠ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° 68HC12 */
/********************************************************************/
void init_PWM() {
PWTST = 0x00; /*Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΡ Π¨ΠΠ Π² Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ */
PWCTL = 0x00; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΡΠΎΠ½ΡΠΎΠ²ΠΎΠΉ Π¨ΠΠ */
PWCLK = 0x28; /*Π±Π΅Π· ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠ², ECLK/128*/
PWPOL = 0x01; /*Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ 1 */
DDRP = 0xFF; /*ΠΠΎΡΡ P ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ */
PWEN = 0x01; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΡ ΠΎΠ΄ Π¨ΠΠ */
PWPER0 = 255; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ Π¨ΠΠ ΠΏΠ΅ΡΠΈΠΎΠ΄, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ 976 ΠΡ */
PWDTY0 = 171; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ */
/* Π½Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ */
}
/********************************************************************/
ΠΡΠ»ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ RTI ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 1600 ΠΎΠ±/ΠΌΠΈΠ½, ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π¨ΠΠ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° 1. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅ΡΠ»ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ 1600 ΠΎΠ±/ΠΌΠΈΠ½, ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π¨ΠΠ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 1. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π¨ΠΠ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½Π° 8.5 ΠΎΠ±/ΠΌΠΈΠ½. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΡΠ°Π±ΠΎΡΡ (Π·Π°Π΄Π°Π½ΠΈΠ΅ 19).
ΠΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΡΠ°Π²Π½ΠΈΡΡ ΠΎΠΏΠΎΡΠ½ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈ ΡΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ RTI ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ (RTLISR). Π ΡΡΠΎΠΉ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠΊΠ΅ ΠΊΠΎΠ΄Π°, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΠΠ Π±ΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² ΡΠ°ΠΉΠ» Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ LCD.H Ρ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ-ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ°ΠΌΠΈ.
7.4.4. Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°
ΠΠ° ΡΠΈΡ. 7.20 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΈ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΡΠΎΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠ°Π»ΠΎΠΌΠΎΡΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ°. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΡΠ°Π±ΠΎΡΡ (Π·Π°Π΄Π°Π½ΠΈΠ΅ 20).
Π°) Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ. ΠΠ»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°
Π±) Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ. Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π ΠΈΡ. 7.20. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
7.4.5. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π΅ΡΡ Ρ-Π²Π½ΠΈΠ·, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΡΡΠΎΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ. ΠΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π·Π΄Π΅Π»Π°, Π΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠΎΠ³Π»Π° Π±Ρ Π²Π°Ρ ΠΈΡΠΏΡΠ³Π°ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΆΠ΅ Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Ρ ΡΠ°Π±ΠΎΡΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ²ΡΠ·ΡΡ ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ.
//********************************************************************
//ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°: motor.Ρ
//Π°Π²ΡΠΎΡΡ: Π‘ΡΠΈΠ² ΠΠ°ΡΡΠ΅ΡΡ ΠΈ ΠΠ°Π½ΠΈΡΠ»Ρ ΠΠ°ΠΊ
//Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ: 10 ΠΌΠ°ΡΡΠ° 2003
//ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡ: 2 ΠΌΠ°ΡΡΠ° 2004
//********************************************************************
//Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ
#include <912b32.h>
#include <LCD.h> //Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΠΠ
#pragma interrupt_handler RTI_isr//ΠΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
// ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ (RTI)
//ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
void initialize_ports(void); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ²
void RTI_isr(void); //ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ RTI
void initialize_RTI(void); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ RTI
void initialize_PA(void); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ PA
void initialize_PWM(void); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π¨ΠΠ
//Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
unsigned int old_count; // ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ PA
int RTI_int_count = 0; // ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΠΈΡΠ»Π°
// ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ RTI
unsigned char PWM_duty_cycle=172; // ΠΠ°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π¨ΠΠ
unsigned int desired_motor_RPM = 1600; //ΡΡΠ°Π»ΠΎΠ½ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
//********************************************************************
void main(void) {
asm(".area vectors(abs)\n" // ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
".org 0xFFF0\n" // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΠΊΡΠΎΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ RTI
".word _RTI_isr\n"
".org 0xFFF8\n"
".word 0x8000, 0x8000, 0x8000, 0x8000\n"
".text");
initialize_ports(); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ²
initialize_LCD(); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠΠ
initialize_RTI(); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ RTI
initialize_PA(); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ PA
initialize_PWM(); //ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π¨ΠΠ
asm("cli"); // Π Π°Π·ΡΠ΅ΡΠΈΡΡ Π²ΡΠ΅ ΠΌΠ°ΡΠΊΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ
while(1) // ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΡΠΈΠΊΠ» Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ
{
;
}
}
//********************************************************************
//initialize_ports: ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ²
//Π²Π²ΠΎΠ΄Π° - Π²ΡΠ²ΠΎΠ΄Π°
//********************************************************************
void initialize_ports(void) {
DDRP = 0xFF; // Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ PORTP ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π΄Π»Ρ Π¨ΠΠ
DDRT = 0x00; //Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ PORTT ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ, Π° Π²ΡΠ²ΠΎΠ΄ PORTT[7]
// ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° PA
DDRB = 0xFF; //PORTB Π½Π° Π²ΡΠ²ΠΎΠ΄ - Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ
//ΠΌΠ°Π³ΠΈΡΡΡΠ°Π»Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΠΠ
DDRDLC = 0xFF; //ΠΏΠΎΡΡ PORT DLC Π½Π° Π²ΡΠ²ΠΎΠ΄ - Π»ΠΈΠ½ΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠΠ
}
//********************************************************************
//RTI_isr: ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠΊΠ°ΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
//********************************************************************
void RTI_isr(void) {
unsigned int new_count;
unsigned int pulse_count;
unsigned int current_RPM;
float max_count = 65535.0;
new_count = PACNT; // ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ² Π² Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ΅
if (new_count > old_count) // ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ²
pulse_count = new_count - old_count;
else pulse_count = (unsigned int)(max_count-(float)(old_count+new_count));
// ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΠΈΡΠ»ΠΎ ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ² ΠΊΠΎΠ΄Π΅ΡΠ° Π² ΠΎΠ±/ΠΌΠΈΠ½
current_RPM = (unsigned int)(pulse_count/0.032768);
// ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΡΠ»ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ RTI Π² ΡΡΠ΅ΡΡΠΈΠΊΠ΅
RTI_int_count = RTI_int_count + 1;
if (RTI_int_count == 10) // ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π° ΠΠΠ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ 10 ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ RTI
{
display_count_LCD(current_RPM); // ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡ ΠΠΠ
RTI_int_count=0; // Π‘Π±ΡΠΎΡΠΈΡΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ RTI
}
// ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
if (current_RPM < desired_motor_RPM) PWM_duty_cycle = PWM_duty_cycle + 1; // Π£ΡΠΊΠΎΡΠΈΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
else PWM_duty_cycle = PWM_duty_cycle - 1; // ΠΠ°ΠΌΠ΅Π΄Π»ΠΈΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
// ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π¨ΠΠ
PWDTY0 = PWM_duty_cycle; //ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
old_count = new_count;
RTIFLG = 0x80; //ΡΠ±ΡΠΎΡΠΈΡΡ ΡΠ»Π°Π³ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ RTI
}
//********************************************************************
// Initialize_RTI: ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ RTI
//- Π Π΅Π³ΠΈΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ RTI (RTICTL):
// - ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ RTI, ΡΠ»Π°Π³ RTIE
// - ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ΅ΡΠΈΠΎΠ΄Π° RTI Π½Π° 32.768 ΠΌΡ
// - ΡΠ±ΡΠΎΡ RTI, Π±ΠΈΡ RTIF ΡΠ΅Π³ΠΈΡΡΡΠ΅ Π€Π»Π°Π³ΠΎΠ² RTI (RTIFLG)
//********************************************************************
void initialize_RTI(void) {
RTICTL = 0x86; // Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ RTI 32.768 ΠΌΡ
RTIFLG = 0x80; // ΡΠ±ΡΠΎΡ RTI
}
//********************************************************************
// Initialize_RTI_PA: ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ 68HC12 Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ² PA
//********************************************************************
void initialize_PA(void) {
TIOS = 0x00; // ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°Π½Π°Π» 7 Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°
TCTL1 = 0x00; // ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ² ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π΅ΡΠ°
OC7M = 0x00; // ΠΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
TSCR = 0x80; // Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΏΠΎ ΡΡΠΎΠ½ΡΡ
//ΠΈΠΌΠΏΡΠ»ΡΡΠ°,
PACTL = 0x50; // Π Π΅ΠΆΠΈΠΌ ΡΡΠ΅ΡΠ° ΡΠΎΠ±ΡΡΠΈΠΉ
}
/********************************************************************/
//initialize_PWM: Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π» Π¨ΠΠ 976 ΠΡ Ρ */
// ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ 67.2% */
/********************************************************************/
void initialize_PWM(void) {
PWTST =0x00; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π¨ΠΠ Π² ΡΠ΅ΠΆΠΈΠΌ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ */
PWCTL =0x00; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π»Π΅Π²ΠΎΠΉ Π³ΡΠ°Π½ΠΈΡ */
PWCLK = 0x28; /*Π±Π΅Π· ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ, ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ clk Π½Π° 32 */
PWPOL = 0x01; /*ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ : Π²ΡΡΠΎΠΊΠΎΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ Π½ΠΈΠ·ΠΊΠΎΠΌΡ */
DDRP = 0xFF; /*ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΡ PORTP ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ */
PWEN = 0x01; /*ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π¨ΠΠ Π΄Π»Ρ ΠΊΠ°Π½Π°Π»Π° 0 */
PWPER0= 0xFF; /* ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΡΠ°Π²Π½ΡΠΌ 256 */
PWDTY0= PWM duty_cycle; /* ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π²Π½ΡΠΌ 172 */
}
/********************************************************************/
7.4.6. ΠΡΠΏΡΡΠ°Π½ΠΈΡ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄Π»Ρ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π±ΡΠ»Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° ΡΠΈΡ. 7.18. ΠΡΠΎ β ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ 68HC12. Π§ΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½Π½ΡΠΉ Π² Π³Π»Π°Π²Π΅ 2 ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠ±ΡΠ°Π² ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ² Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΌΠ΅ΡΠ΅Π½Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ, ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π² 1600 ΠΎΠ±/ΠΌΠΈΠ½.