| Автор | Сообщение |
slowolitus Участник Сообщения: 504
|
Пишу прошивку для AOUYE 899+ всё готово, осталось только организовать ПИД (ПИ) регулятор.
Ищу практическую реализацию целочисленного дискретного регулятора на любом ассемблере, лучше конечно на 8051.
В поиске ничего путного не нашёл, может у кого есть наработки? И вопрос по коэффициентам для фена остаётся неясным, придётся подключать осцилл к выходу усилителя и работать по методу Зиглера–Никольса...или кто то делает по другому? |
|
Transformator Участник Сообщения: 1383
|
slowolitus, Так там голая математика.
Или не понятен алгоритм пид регулирования.
Или лень писать самому и хочется готовое решение встроить в свой проект. |
|
slowolitus Участник Сообщения: 504
|
Transformator, математика сама понятна, да и написать не проблема, на си например, проблема найти на ассемблере и сделать так чтобы все вычисления были целочисленными...и по возможности короткими... |
|
o_l_e_g Участник Сообщения: 2427
|
slowolitus, мсье знает толк в извращениях! Писать математику на асме, зачем? или сомневаешься в умственных способностях авторов библиотечных функций, думаешь лучше получится? Хочешь цельночисленные? Так опиши переменные соответствующими типами. ИМХО |
|
slowolitus Участник Сообщения: 504
|
o_l_e_g, программа уже написана на асме, если я сейчас начну писать на си да и ещё в формате с плавающей запятой то о том что прога влезет в контроллёр можно и не мечтать, он и так перегружен и места там всего ничего, в оригинальной прошивке ПИДа и в помине не было, только включи и выключи. Прошивка сильно улучшена, алгоритм брезенхема..Вообще си и AT89C2051 это имхо изврат тогда уж С4051 |
|
o_l_e_g Участник Сообщения: 2427
|
Так напиши математику на Си, а своё творчество оставь ассемблерной вставкой. Код сильно короче не будет, поверь, а ебли с танцами будет! Да и вообще, для только ПИД и индикации, и 2К много. |
|
slowolitus Участник Сообщения: 504
|
o_l_e_g, если алгоритм будет без плавающей запятой то можно и на си. А кроме индикации и пид там ещё много чего...например обращение к АЦП по последовательной шине |
|
slav0n Забанен  Сообщения: 2261
|
| slowolitus писал: | | Ищу практическую реализацию целочисленного дискретного регулятора на любом ассемблере |
так возьми Сишный код и препиши на асм.
Погугли - Перевод статьи «Просто о ПИД-алгоритмах» |
|
slowolitus Участник Сообщения: 504
|
slav0n, отличная статья, спасибо! , буду разбираться |
|
Владимир Анатольевич Участник Сообщения: 5033
|
slowolitus, очень интересно КАК ты будешь подбирать постоянные времени И и Д.
Да в широком диапазоне температур.
Может начнёшь с регулируемого П в П-режиме?
Или этого не достаточно? |
|
slowolitus Участник Сообщения: 504
|
Логичнее было бы вставить си код в ассемблер, такое возможно? если да то как?
Вот целочисленный сишный код, нужно что бы он исполнялся в строго заданном месте уже написанного кода, принимал и возвращал значения через строго определённые регистры декларированные в асме.
#define epsilon 2
#define MAX 100
#define MIN 1
#define Kp 5
#define Kd 3
#define Ki 100
#include
signed short PIDcal(signed short TEMP_SET,signed short TEMP_CUR)
{
static signed short pre_error = 0;
static signed short integral = 0;
signed short error;
signed short derivative;
signed short output;
error = TEMP_SET - TEMP_CUR;
if(abs(error) > epsilon)
{
integral = integral + error;
}
derivative = (error - pre_error);
output = Kp*error + integral/Ki + Kd*derivative;
if(output > MAX)
{
output = MAX;
}
else if(output
{
output = MIN;
}
pre_error = error;
return output;
}
Добавлено 12-12-2012 09:24
Владимир Анатольевич, коэффициенты буду менять кнопками... а к выходу усилителя термопары подключусь осциллом и буду следить за автоколебаниями по Зиглеру-Николсу ...Потом эту часть кода с подстройкой коэффициентов просто уберу. Дифференциальную часть скорее всего тоже уберу.... |
|
slav0n Забанен  Сообщения: 2261
|
| slowolitus писал: | | Логичнее было бы вставить си код в ассемблер, такое возможно? |
это типа - "вперед в прошлое" ?
Код же простой, и легко переписывается на асм.
Вызывать по прерыванию от таймера. |
|
slowolitus Участник Сообщения: 504
|
slav0n, именно так! вперёд в прошлое
таймеры заняты другими делами, про них можно забыть!
у меня есть ассемблерный листинг но нет исходников стандартных мат-функций вызываемых по lcall
12 EXTRN CODE (_abs)
13 EXTRN CODE (?C?SIDIV)
14 EXTRN CODE (?C?IMUL)
Как их выдрать из кейла? где они хранятся?
Или как вызвать сишную функцию из асма?? |
|
Владимир Анатольевич Участник Сообщения: 5033
|
| slowolitus писал: | Дифференциальную часть скорее всего тоже уберу....
|
Ну ПИ не получится. Как я и говорил, всё сведётся к П-регулятору с изменяемым коэффициентом.
Или на крайняк подобранным фиксированным.
 |
|
slav0n Забанен  Сообщения: 2261
|
| slowolitus писал: | | таймеры заняты другими делами, про них можно забыть! |
какими-такими другими делами, если основное дело - ПИД.
Может они фигнёй занимаются на самом деле?
| slowolitus писал: | | Как их выдрать из кейла? где они хранятся? |
не знаю. А зачем их вытаскивать? Напиши своё.
Я бы для начала умножение-деление заменил сдвигом. А дальше - по поведению системы. В конце статьи написано что-как.
| Цитата: | | Или как вызвать сишную функцию из асма?? |
никак |
|
slowolitus Участник Сообщения: 504
|
что характерно для этого форума так это то что участники не стремятся помочь вопрошающему а всеми силами пытаются убедить его в том, что то что ему нужно на самом деле ему нахрен не нужно, и так в каждой теме!
slav0n, основное дело это ШИМ управление мотором и индикация, это то на что ушли таймеры а ещё есть брезенхем. а пид это всего навсего кусок кода который осуществляет простые вычисления 16 битных чисел со знаком.
Зачем заменять сдвигом? 8051 прекрасно умножает и делит аппаратно.
есть библиотека беззнаковых 16 битных операций, а со знаком найти не могу... а то бы проблема решилась.
Добавлено 12-12-2012 12:03
не может быть... в x86 такое же прокатывает |
|
starko Гость 95.153.*.*
|
slowolitus, скажи, пожалуйста, а зачем тебе двубайтные переменные, если фактически двубайтным должен быть только integral, и тот беззнаковый?  |
|
slav0n Забанен  Сообщения: 2261
|
| slowolitus писал: | | основное дело это ШИМ управление мотором и индикация, это то на что ушли таймеры |
Никакое оно не основное - ШИМ мотора и дисплей не в петле ОС. Основное - датчики температуры и ШИМы нагревателей. Всё это хозяйство легко можно и на одном таймере завертеть.
| slowolitus писал: | | а ещё есть брезенхем. |
Нафига брезенхем для паяльника и фена?  |
|