Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 112

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

/*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 ΠΎΠ±/ΠΌΠΈΠ½.