Chương 2. Phân tích và thiết kế hệ thống
2.3. Thiết kế mạch điều khiển động cơ
2.3.2. Thiết kế mạch điều khiển động cơ
Hình 162. Mạch nguyên lý
86
Hình 163. Mạch in
Hình 164. Mạch thật
87
Mô tả:
Khối nguồn
Hình 165. Khối nguồn Khối Điều khiển
Hình 166. Khối điều khiển
88
Khối Điều khiển Động cơ Servo
Hình 167. Khối điều khiển động cơ Servo Khối điều khiển động cơ DC
Hình 168. Khối điều khiển động cơ DC
89
Khối truyền thông UART
Hình 169. Khối truyền thông Khối cảm biến trọng lượng (dự kiến)
Loadcell CAS BCL100
90
Hình 170. Loadcell CAS BCL100
Hình 171. Cấu tạo Loadcell CAS BCL100 Thông số kỹ thuật của Loadcell CAS BL100
Bảng thông số kỹ thuật của Loadcell CAS BCL100
Tải trọng lớn nhất kgf 100
Tỉ lệ điện áp đầu ra Điện áp không tải
mV/ V mV/ V
2.0 ± 0.2 0 ± 0.1 Sai số
Sai số lặp lại
Độ ổn định sau khi tải (30 phút) Ảnh hưởng của nhiệt độ
Điện áp không tải Điện áp đầu ra
%
%
%
%/ 10℃
%/ 10℃
0.03 0.01 0.03 0.028 0.014 Điện áp kích thích
Điện áp đề nghị Điện áp lớn nhất Trở kháng
Đầu vào Đầu ra Cách điện
V V Ω Ω MΩ
10 15 400 ± 20 350 ± 3.5
>2,000
Khoảng nhiệt độ đảm bảo ℃ -10 to +40
91
Khoảng nhiệt độ làm việc ℃ -20 to +70
Chuẩn bảo vệ IP67
Loại cảm biến Single Point
Chất liệu anodized aluminum
Mức quá tải an toàn 150%
Chiều dài dây tín hiệu 2.5m
Khối chuyển đổi tương tự số
Tín hiệu điện tương tự từ Loadcell sẽ được đưa tới khối chuyển đổi tương tự số.
Khối chuyển đổi tương tự số có nhiệm vụ chuyển đổi tín hiệu tương tự sang tín hiệu số, đưa tín hiệu số vào khối vi xử lý trung tâm để xử lý, hiển thị thông tin khối lượng.
Sau khi tìm hiểu yêu cầu của sản phẩm, cũng như phân tích tín hiệu điện áp tương tự đầu ra của Loadcell, bộ chuyển đổi tương tự số ADC 24-bit HX711 đáp ứng đầy đủ những yêu cầu phân tích ở trên.
Một số tính năng của ADC 24-bit HX711
• 2 kênh đầu vào tương tự.
• Tích hợp IC khuyếch đại tạp âm thấp với các mức khuyếch đại 32, 64, 128.
• Tích hợp mạch ổn áp phục vụ cho cấp nguồn Loadcell và điện áp tham chiếu.
• Tích hợp mạch dao động trong chip, ngoài ra có thể sử dụng thạch anh ngoài.
• Truyền thông nối tiếp.
• Tốc độ dữ liệu đầu ra: 10SPS hoặc 80SPS.
• Điện áp hoạt động: 2.5V - 5.5V DC.
• Dòng diện tiêu thụ: 1.5mA khí hoạt động bình thường và 1.5uA khi ở chế độ ngủ.
• Nhiệt độ hoạt động: -400C ~ 850C.
• Ứng dụng cho mạch cân điện tử.
Sơ đồ khối của ADC 24-bit HX711
92
Hình 172. Sơ đồ khối của IC HX711
Điện áp tương tự được khuếch đại bằng bộ khuyếch đại tạp âm thấp với hệ số khuyếch đại là 32,64,128. Tín hiệu sau khi khuếch đại được đưa vào bộ chuyển đổi tương tự số ADC 24bit. Dữ liệu số đầu ra được gửi đi qua bộ giao tiếp. Điện áp tham chiếu của bộ ADC ổn định do IC sử dụng bộ ổn áp tương tự.
Sơ đồ chân của ADC 24-bit HX711
Hình 173. Sơ đồ chân IC HX711
93
Bảng chú thích chi tiết các chân của IC HX711
PIN Tên Chức năng Miêu tả
1 VSUP Cấp nguồn DC 2.7 ~ 5.5V
2 BASE Đầu ra tương tự Đầu ra điều khiển ổn áp (không nối khi không sử dụng)
3 AVDD Điện áp tham chiếu DC 2.7 ~ 5.5V
4 VFB Đầu vào tương tự Đầu vào điều khiển ổn áp (Nối đất khi không sử dụng)
5 AGND Đất Chân nối đất
6 VBG Đầu ra tương tự Điện áp tham chiếu của ổn áp 7 INA- Đầu vào tương tự Đầu âm tín hiệu tương tự kênh A 8 INA+ Đầu vào tương tự Đầu dương tín hiệu tương tự kênh A 9 INB- Đầu vào tương tự Đầu âm tín hiệu tương tự kênh B 10 INB+ Đầu vào tương tự Đầu dương tín hiệu tương tự kênh B 11 PD_SCK Đầu vào số Chân xung nhịp cho việc truyền dữ liệu 12 DOUT Đầu ra số Dữ liệu đầu ra
13 XO Đầu ra/vào số Nối với thạch anh ngoài (không nối khi không sử dụng)
14 XI Đầu vào số Mức 0: sử dụng thạch anh nội, mức 1: sử dụng thạch anh ngoài
15 RATE Đầu vào số Tốc độ dữ liệu, mức 0: 10Hz, mức 1: 80Hz
16 DVDD Cấp nguồn DC 2.7 ~ 5.5V
Sơ đồ thiết kế khối chuyển đổi tương tự số sử dụng ADC 24-bit HX711
94
Hình 174. Sơ đồ thiết kế khối chuyển đổi tương tự số sử dụng ADC 24-bit HX711 Như đã trình bày ở phần trước, để đảm bảo sự cân bằng về lực, độ chính xác của giá trị lực mà Loadcell nhận được, chúng tôi sử dụng 2 Loadcell đặt ở 2 đầu chịu lực.
HX711 hỗ trợ 2 kênh vào tương tự A và B, nhưng kênh B lại chỉ hỗ trợ hệ số khuyếch đại là 32 nên chúng tôi quyết định không sử dụng kênh B. Thay vào đó, chúng tôi sử dụng 2 mạch chuyển đổi số tương tự sử dụng IC HX711 cho 2 Loadcell. Hình trên là mạch thiết kế của một Loadcell và 1 mạch chuyển đổi số tương tự dùng IC HX711, HX711 sử dụng bộ dao động nội (Chân XI được nối với đất), số ký tự xuất ra trong 1 giây là 10 (Chân RATE nối đất). Tín hiệu điện áp từ Loadcell được đưa vào kênh A đi qua bộ khuyếch đại tạp âm thấp có hệ số 128.
Hai chân PD_SCK, DOUT phục vụ cho việc truyền thông nối tiếp giữa HX711 với khối xử lý. Trong đó, Chân PD_SCK có nhiệm vụ tạo xung nhịp cho việc truyền dữ liệu. Khi chân PD_SCK chuyển trạng thái từ mức “0” lên mức “1". 1 bit dữ liệu được xuất ra từ chân DOUT.
Để đảm bảo độ chính xác cao khi nhận tín hiệu từ cảm biến, chúng tôi lựa chọn phương án sử dụng mạch ổn áp cho điện áp tham chiếu (Reference Voltage) và điện áp kích thích (Excitation Voltage) tích hợp sẵn trên HX711. Giá trị điện áp AVDD=VBG*(R12+R13)/R13 = 1.25*(20k+8.2k)/8.2k = 4.3 (V).
Loadcell được kích thích bởi điện áp có giá trị AVDD=4.3V, khi Loadcell chịu tải trọng lớn nhất, điện áp đầu ra Loadcell có giá trị 2*4.3 = 8.3mV. Điện áp tham chiếu của HX711 là 4.3V, sử dụng khuyếch đại tạp âm thấp có hệ số 128 nên dải điện áp đưa vào kênh A phải nằm trong khoảng –(1/2)*VADD/128 ~ (1/2)*VADD/128, trong mạch thiết kế này là -16mV ~ 16mV (> 8.3mV).
Mặt khác, độ chính xác của mạch cân khối lượng là 0.1Kg. Khi có sự thay đổi khối lượng là 0.1Kg, giá trị điện thế thay đổi sẽ là 8.3mV/1000 = 8.3uV. HX711 có độ phân giải là 24 bit, giá trị mà HX711 có thể tạo ra từ 0 đến 224-1. Giá trị điện áp làm thay đổi một mức giá trị của HX711 là 16mV/(224-1)=0.001uV (< 8.3uV).
95
Qua phân tích ở trên, thiết kế mạch ở hình trên phù hợp với các yêu cầu kỹ thuật của mạch.
Code:
void Delay__hx711_us(void) {
delay_ms(1);
}
unsigned long int HX711_Read(void) {
unsigned long int count;
unsigned char i;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
while(HX711_DOUT);
for(i=0;i<24;i++) {
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT) count++;
}
HX711_SCK=1;
count=count^0x007FFFFF;
Delay__hx711_us();
HX711_SCK=0;
return(count);
96
}
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define HX711_DOUT PIND.0
#define HX711_SCK PORTD.1 //#define Uee 3.93 // (volt)
//#define Weight_Max 3000 // (gam) //#define Error 0.05 // (volt)
//#define Volt_N 5.0/9 // ti le giua Volt/Uee
//char flash *str='123';
char rx_buf='\0';
int temp;
char str[];
char buffer[];
char buffer1[];
unsigned int temp1;
unsigned long int value;
unsigned int weight,weight1;
unsigned char Flag_Rx;
unsigned char UART_Buffer_RX[30];
unsigned char Index;
unsigned char Flag_Buf_Rx;
unsigned char Buf[16],bufer[],str[];
97
unsigned char Cov[16];
unsigned char D_Text;
unsigned char i,j,start;
#include <HX711.c>
// Declare your global variables here
#define DATA_REGISTER_EMPTY (1<<UDRE0)
#define RX_COMPLETE (1<<RXC0)
#define FRAMING_ERROR (1<<FE0)
#define PARITY_ERROR (1<<UPE0)
#define DATA_OVERRUN (1<<DOR0)
// USART0 Receiver buffer
#define RX_BUFFER_SIZE0 8
char rx_buffer0[RX_BUFFER_SIZE0];
#if RX_BUFFER_SIZE0 <= 256
unsigned char rx_wr_index0=0,rx_rd_index0=0;
#else
unsigned int rx_wr_index0=0,rx_rd_index0=0;
#endif
#if RX_BUFFER_SIZE0 < 256 unsigned char rx_counter0=0;
#else
unsigned int rx_counter0=0;
#endif
// This flag is set on USART0 Receiver buffer overflow
98
bit rx_buffer_overflow0;
// USART0 Receiver interrupt service routine interrupt [USART0_RXC] void usart0_rx_isr(void) {
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {
rx_buffer0[rx_wr_index0++]=data;
#if RX_BUFFER_SIZE0 == 256
// special case for receiver buffer size=256
if (++rx_counter0 == 0) rx_buffer_overflow0=1;
#else
if (rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
if (++rx_counter0 == RX_BUFFER_SIZE0) {
rx_counter0=0;
rx_buffer_overflow0=1;
}
#endif } }
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART0 Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
99
{
char data;
while (rx_counter0==0);
data=rx_buffer0[rx_rd_index0++];
#if RX_BUFFER_SIZE0 != 256
if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#endif
#asm("cli") --rx_counter0;
#asm("sei") return data;
}
#pragma used-
#endif
// USART0 Transmitter buffer
#define TX_BUFFER_SIZE0 8
char tx_buffer0[TX_BUFFER_SIZE0];
#if TX_BUFFER_SIZE0 <= 256
unsigned char tx_wr_index0=0,tx_rd_index0=0;
#else
unsigned int tx_wr_index0=0,tx_rd_index0=0;
#endif
#if TX_BUFFER_SIZE0 < 256 unsigned char tx_counter0=0;
#else
unsigned int tx_counter0=0;
#endif
// USART0 Transmitter interrupt service routine
100
interrupt [USART0_TXC] void usart0_tx_isr(void) {
if (tx_counter0) {
--tx_counter0;
UDR0=tx_buffer0[tx_rd_index0++];
#if TX_BUFFER_SIZE0 != 256
if (tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0;
#endif } }
#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART0 Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c) {
while (tx_counter0 == TX_BUFFER_SIZE0);
#asm("cli")
if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0)) {
tx_buffer0[tx_wr_index0++]=c;
#if TX_BUFFER_SIZE0 != 256
if (tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0;
#endif
++tx_counter0;
} else
UDR0=c;
101
#asm("sei") }
#pragma used-
#endif
// Standard Input/Output functions
#include <stdio.h>
// Timer1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) {
DDRB.5=1;
PORTB.5^=1;
value=HX711_Read();
weight=value*0.000466;
temp=weight;
temp1=abs(weight-3878)*49;
sprintf(buffer,"A");
printf("%s",buffer);
if (temp <10) printf("0000");
else if (temp <100) printf("000");
else if (temp <1000) printf("00");
else if (temp <10000) printf("0");
else;
printf("%i",temp);
sprintf(buffer1,"B");
printf("%s",buffer1);
if (temp1 <10) printf("0000");
else if (temp1 <100) printf("000");
else if (temp1 <1000) printf("00");
102
else if (temp1 <10000) printf("0");
else;
printf("%i",temp1);
printf("XXXX");
}
Toàn bộ khối cảm biến trọng lượng, xử lý số trên là phần thiết kế dự kiến đưa ra.
Trong mô hình sản phẩm luận văn này, do một số giới hạn, những thiết kế đó chưa được thực hiện và được đưa ra như một hướng phát triển tiếp của sản phẩm.
103