You are on page 1of 4

o tc ng c.

Trnh by: khuongk48.


o tc ng c bng encoder thng lm theo 2 cch:
- Cch 1: s dng timer kt hp vi counter ( xem trong ti liu hng dn thc
hnh).
- Cch 2: S dng timer kt hp vi ngt cng.
Bi ny hng dn o tc ng c theo cch 2.
Tc : v tnh theo vng/ pht.
V= (s vng ng c quay c trong khong thi gian t)/t.
S dng encoder tr v 100 xung/ vng.
V vy tnh tc ta cn bit c.
- Khong thi gian m xung tr v t encoder. S dng timer
- S xung tr v l bao nhiu trong khong thi gian ta m s vng ng c
quay c trong khong thi gian tc . S dng ngt GPIO.
S mch:

- S dng Psoc 24966.

- Lcd 16x2 hin th thng tin tc .


- Chn encoder c ni vi chn P0.7, thit lp l chn ngt GPIO.
trong v dng ny ta s m xung trong khong thi gian l 0.01s. v vy s thit
lp timer l 0.01s ( tng t nh trong bi timer).
Thip lp ngt GPIO l ngt khi c sn nn. ( xem thit lp trong bi ngt
GPIO)
Code:
// Do toc do dong co
// Encodo noi voi chan P0.7
// LDC noi voi Port2
#include <m8c.h>

// part specific constants and macros

#include "PSoCAPI.h"

// PSoC API definitions for all User Modules

unsigned long xung, van_toc;


unsigned int vong;
//.................... Chuong trinh ngat ngoai dem so xung tra ve.......................//
#pragma interrupt_handler PSoC_GPIO_ISR
void PSoC_GPIO_ISR()
{
xung++;
}
//................... tinh xem duoc bao nhieu vong trong 1 giay....................................//
#pragma interrupt_handler Timer8_1_ISR // 0.01s
void Timer8_1_ISR()
{
vong = xung;// vong = xung/100/0.01 = xung vong tren 1 giay.
van_toc = vong*60; // tinh van toc ra vong tren phut.
xung = 0;

//................... Khoi tao cac modul........................................................................//


void int_sys()
{
M8C_EnableGInt;
LCD_1_Start();
Timer8_1_WritePeriod(99); // time =0.01s
Timer8_1_WriteCompareValue(0);
Timer8_1_EnableInt(); // bat ngat timer
Timer8_1_Start();
M8C_EnableIntMask(INT_MSK0,0x20);

}
//........................... hien thi len Lcd......................................................................//
void lcd_2number(long Data)
{
LCD_1_WriteData('0'+Data/100);
LCD_1_WriteData('0'+ (Data%100)/10);
LCD_1_WriteData('0'+ (Data%100)%10);
}
//.........................................................................................................................//
void vantoc()
{
LCD_1_Position(0,0);
LCD_1_PrCString(" Van Toc: ");

lcd_2number(van_toc);
LCD_1_Position(1,3);
LCD_1_PrCString(" Vong/Phut ");

}
void main()
{
int_sys();
while(1)
{
vantoc();
}
}
Gii thch chng trnh:
- Chng trnh ngt GPIO c nhim v m s xung nhn c t encoder. C
mi khi c xung tr v t encoder th ngt GPIO s xy ra v tng bin m xung nn
1. ( bin m xung l kiu long 4 byte nn khng s trn s. Hihi)
- Chng trnh ngt timer: to ra khong thi gian chnh xc 0.01 giy. C sau
0.01 ngt timer xy ra 1 ln. Chng trnh ngt timer s tnh xem ng c quay
c bao nhiu vng trong khong thi gian 0.01 giy ri tnh vn tc. ng thi xa
xung v 0 tip tc m cho ln tip theo.
- Do encoder 100 xung / vng
trong 0.01 giy ng c quay c : xung/100 (vng).
Trong 1 giy ng c quay c: (xung/100)/0.01 ( vng).
Trong 1 pht ng c quay c : 60* (xung/100)/0.01 ( vng).

You might also like