Đối với thuật toán của đề tài, 2 giá trị thể tích và thời gian nhập vào sẽ được tính toán chuyển thành 2 giá trị là tổng số bước quay của motor và thời gian quay một bước.
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
Motor bước quay một vòng hết 200 bước (từ datasheet), để chia nhỏ số bước thì cần sử dụng driver với vi bước là 1/2, vì vậy, để quay hết 1 vòng thì motor bước cần quay:
200 𝑥 2 = 400 (𝑏ướ𝑐) (3.1) Để biết được 1 vòng quay của motor bước đẩy được bao nhiêu ml thì nhóm tiến hành lập trình cho motor bước quay một vòng và đo đạt thể tích dịch chuyển trên bơm tiêm, kết quả đo đạc được đối với bơm tiêm 5ml là khoảng 0,195ml, bơm tiêm 10ml là khoảng 0.35ml và bơm tiêm 50ml là khoảng 0.5ml. Như vậy, đối với bơm tiêm 5ml, giả sử ta muốn truyền V (ml) thể tích thì motor bước sẽ quay với số vòng là:
𝑉
0,195 (𝑣ò𝑛𝑔) = 𝑉
0,195∗ 400 (𝑏ướ𝑐) = 𝑉 ∗ 2051 (𝑏ướ𝑐) (3.2)
Tương tự ta cũng sẽ tính được tổng số bước quay của motor bước ứng với V (ml) đối với bơm tiêm 10ml và 50ml. Từ công thức (3.2) trên, 2051*V là tổng số bước quay của motor bước ứng với V (ml), hay nói cách khác, để truyền được V ml thì motor bước phải quay được 2051*V bước. Với giá trị thời gian T (s) mong muốn để truyền V (ml) thể tích, thay vì kiểm soát thời gian (T) nhập vào thì bây giờ chúng ta sẽ kiểm soát thời gian một bước quay của motor bước là bao nhiêu (t mb).
𝑡 𝑚𝑏 = 𝑇
𝑇ổ𝑛𝑔 𝑠ố 𝑏ướ𝑐 (3.3)
Để kiểm soát thời gian một bước (t mb) thì thuật toán so sánh cộng dồn 1ms được sử dụng, đầu tiên so sánh t mb với 1ms, nếu chưa bằng thì so sánh với 2ms, nếu vẫn chưa bằng thì so sánh với 3ms, …, trong trường hợp bằng thì tiến hành thực hiện công việc là quay một bước cho motor bước. Để định thời chính xác thời gian, timer 1 được sử dụng với thời gian mỗi lần tràn là 1ms, cứ sau mỗi lần tràn (mỗi lần đủ 1ms) thì tiến hành kiểm tra có bằng thời gian một bước (t mb) hay không, nếu không thì tiếp tục cộng 1ms rồi định thời lại. Cứ cộng dồn thời gian như vậy đến khi nào bằng với thời gian một bước thì sẽ gán lại giá trị 1ms, đồng thời đảo 1 xung ngõ ra RC1 của vi điều khiển, xung này có chức năng làm motor bước quay 1 bước.
Cũng cần phải hiểu rằng, motor bước sẽ quay một bước khi có một xung tác động (chỉ quay khi nhận tín hiệu mức cao, tính hiệu mức thấp không có tác dụng), điều này đồng nghĩa với việc, để motor bước quay một bước và liên tiếp cho bước tiếp theo thì cần phải 2 xung, một xung mức cao và một xung mức thấp (hay là 1 chu kỳ). Như vậy thực tế thì cần phải nhân gấp đôi giá trị số bước trên lý thuyết để motor bước quay đúng. Từ công thức (3.2) suy ra công thức tính số bước thực tế sẽ là:
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
𝑡ổ𝑛𝑔 𝑠ố 𝑏ướ𝑐 = 𝑉 ∗ 2051 ∗ 2 = 𝑉 ∗ 4102 (3.4)
Từ công thức (3.3) có thể thấy được thời gian quay một bước của motor không phải luôn luôn là một số chẵn, vì vậy không thể đem so sánh với thời gian định thời là số nguyên (so sánh với 1ms, 2ms, 3ms). Do đó, cần phải xử lý phần thập phân của giá trị thời gian quay một bước để tránh gây ra sai số về thời gian.
Cách xử lý này là khi tính ra thời gian quay một bước (t mb) thì ta sẽ nhân với 1000, sau đó đem chia 1000 để lấy số dư. Số dư này sẽ được delay trong lúc định thời để bù lại sai số ở phần thập phân của giá trị thời gian quay một bước. Để dễ hiểu, ví dụ thời gian quay một bước tính theo lý thuyết là 2,49ms, tuy nhiên, khi dùng phép chia trong ngôn ngữ C thì chỉ hiểu là 2ms, phần thập phân 0,49ms không được tính. Do vậy để tránh thiếu hụt 0,49 ms/bước ở phần thập phân thì ta nhân giá trị thời gian một bước với 1000 sẽ thành 2490ms, và chia với 1000 để lấy phần dư, phần dư lúc này sẽ là 490ms. Như vậy, khi định thời đủ (tràn 2 lần), mỗi lần 1 ms thì sẽ bằng với giá trị thời gian quay mỗi bước (2ms), lúc này sẽ đảo chân C1 để motor bước quay một bước. Tuy nhiên vẫn còn bị thiếu hụt 0,49ms ở phần thập phân, vì vậy sau khi được xử lý thành 490ms, trước khi định thời mỗi lần tràn thì nhóm đem xử lý delay ở us (delay 490 us), mục đích của delay là để bù lại khoảng thời gian bị thiếu hụt trên mỗi bước. Vì lý do tràn 2 lần, nên khoảng thời gian delay sẽ được chia 2 lần, cứ mỗi lần định thời thì sẽ delay 490/2=245us.
Để dễ hình dung, với thời gian mỗi bước là 2,49ms sẽ được xử lý thành 2 giá trị là 2ms và 490ms. Bắt đầu định thời timer, nhóm xử lý delay với hàm delay us, giá trị delay là 490/2=245us, khi định thời đủ 1ms thì tràn, kiểm tra thời gian quay một bước lúc này là 2ms chưa bằng 1ms, do vậy set lại giá trị timer và tiếp tục định thời lần thứ 2, trước khi định thời lần 2 nhóm cũng sẽ delay một khoảng thời gian 490/2=245us, sau đó định thời đủ thời gian là 1ms nữa thì thời gian định thời lúc này là 2ms, kiểm tra với giá trị thời gian quay một bước trước, hai giá trị này bằng nhau và bằng 2ms nên sẽ đảo xung ngõ ra RC1 của vi điều khiển làm quay một bước, đồng thời set lại thời gian định thời trở về 1ms. Tổng thời gian từ lúc bắt đầu định thời lần đầu tiên đến khi đảo chân ngõ ra RC1 là: 1ms+245us +1ms+245us=2,49ms. Như vậy, giá trị thời gian quay một bước không bị thay đổi đối với thuật toán.